Страница 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
Спасибо! То что и надо было.