Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

Правильно завершить ожидающий поток   Найти похожие ветки 

 
Dmitry_177   (2007-04-19 17:37) [0]

Создал поток, который используется в качестве будильника и с момента его срабатывания с определенным периодом должно что-то происходить, так:

function ThreadTimer(Param: Pointer): DWORD; stdcall;
begin
 while true do
   begin
     WaitForSingleObject(hTimer, INFINITE);
     // действия
   end;
end;

...

hTimer := CreateWaitableTimer(nil, false, nil);
SetWaitableTimer(hTimer, TLargeInteger(fTime), Period, nil, nil, false);
CloseHandle(CreateThread(nil, 0, @ThreadTimer, nil, 0, idThread));


Но вопрос в том, как правильно остановить этот ThreadTimer? Ведь пользователь может сменить время срабатывания или период..


 
Dmitry_177   (2007-04-19 17:40) [1]

Может в цикле while true do вместо true сделать флажек, например b: BOOL? И при изменении времени выставить флажек и выполнить CloseHandle(hTimer); тогда по идее WaitForSingleObject прекратит работу и при измененном флажке цикл прекратится и поток сам завершит свою работу.. Но это я только предложил, правильно ли это? Больше всего меня волнует правильно ли то что при CloseHandle(hTimer); функция WaitForSingleObject завершится?


 
Leonid Troyanovsky ©   (2007-04-19 19:02) [2]


> Dmitry_177   (19.04.07 17:40) [1]

>  правильно ли это? Больше всего меня волнует правильно ли
> то что при CloseHandle(hTimer); функция WaitForSingleObject
> завершится?

If this handle is closed while the wait is still pending, the function"s behavior
is undefined.

В качестве решения можно избрать WaitForMultipleObjects
или WaitForSingleObjectEx. RTFM: msdn.

--
Regards, LVT.


 
GrayFace ©   (2007-04-23 14:07) [3]

Создать Event и ждать его вместе с WaitableTimer"ом. А еще можно обойтись без WaitableTimer"а: WaitForSingleObject(hEvent, 100{интервал таймера}). Только точность отсчета времени может пострадать.



Страницы: 1 вся ветка

Текущий архив: 2007.10.21;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
15-1190286598
ANTPro
2007-09-20 15:09
2007.10.21
Подкажите программу


2-1191175017
Pacific
2007-09-30 21:56
2007.10.21
WebBrowser1


2-1190532007
San1712
2007-09-23 11:20
2007.10.21
Как записать в реестр параметр типа REG_DWORD ?


11-1174132836
Compiler
2007-03-17 15:00
2007.10.21
Создание DirList a


15-1190195376
Beastie Boys
2007-09-19 13:49
2007.10.21
у дизайнеров хорошая фантазия?