Страница 1 из 1

Дайте совет по работе с thread-ами

Добавлено: 02 июл 2004, 23:00
alexx
Программа запускает thread который тянет с SQL данные. Если с threadа изменять позицию ProgressBar то есть в Билдере thread-safe метод Syncronize. Но если Юзер дёргает окно, то thread ждёт.
Подскажите что-нибудь элегантное!

Добавлено: 06 июл 2004, 23:22
alexx
Неужели ни кто подобное не реализовывал?
Тогда так:

я имею переменную int в Thread-Classe, её родную инкрементирую. А в MainForm поставил Timer, он регулярно позицию ProgressBar-a опрашивает. Это tread-safe или нужно c CriticalSection работать?

Добавлено: 08 июл 2004, 13:54
Romeo
Если просто будешь опрашивать, то CriticalSection - это излишество. CriticalSectrion создана для совместного изменения разными зредами (процессами) одного и того же места в памяти.

Добавлено: 08 июл 2004, 14:15
DeeJayC
alexx писал(а):Неужели ни кто подобное не реализовывал?
Тогда так:

я имею переменную int в Thread-Classe, её родную инкрементирую. А в MainForm поставил Timer, он регулярно позицию ProgressBar-a опрашивает. Это tread-safe или нужно c CriticalSection работать?
Можно и без Critical Section.

Можно определить в thread

Код: Выделить всё

CWnd *parent]


А потом

[code]

int CMyThread :: Run(...) {

   for( .... ) {
      do_something();
      parent->PostMessage( WM_USER+1, 0, 0 );
   };

};

А в parent

Код: Выделить всё


HRESULT CMyWnd :: ProcessUserMessage( HPARAM .... ) {

    m_progress->do_something()

};

Сорри... Это для VC, но я надеюсь, у Билдера обработка событий есть.

Добавлено: 09 июл 2004, 01:16
alexx
Спасибо! То что и надо было.