Главная страница
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.027 c
10-1138718085
BiN
2006-01-31 17:34
2007.10.21
Некорректная передача строкового параметра при работе с Excel


2-1190890507
l_v
2007-09-27 14:55
2007.10.21
Сообщения другим приложениям


15-1190093011
boriskb
2007-09-18 09:23
2007.10.21
Домен su живет и побеждает


15-1190281655
Flikik
2007-09-20 13:47
2007.10.21
Delphi


15-1190345728
Riply
2007-09-21 07:35
2007.10.21
Коварный TStrings :)