Ярлыки

пятница, 18 июня 2010 г.

Multithreads

http://junglewin.narod.ru/threads.html#timer

Подскажите, плиз, что-то я совсем запутался.
в созданном потоке создаю таймер, SetWaitableTimer(...)
Затем жду когда он протикает (это может произойти через н-дцат секунд).
WaitForSingleObject(WaitableTimerHandle, INFINITE) ? ...
как из основного потока завершить (не убивая) поток, который находится в режиме ожидания, или звершить этот таймер досрочно?

Подробней это выглядит так:
WaitableTimerHandle:=CreateWaitableTimer(nil, True, 'DeathReviewTimer');
...
while not Terminated do begin
...
SetWaitableTimer(WaitableTimerHandle,
DueTime,
0,
nil,
nil,
False)
...
if (WaitForSingleObject(WaitableTimerHandle, INFINITE)<>WAIT_OBJECT_0) then begin
MessageBox(0, 'WaitForSingleObject failed!', 'Error!',
MB_ICONERROR or MB_OK or MB_SETFOREGROUND or MB_TOPMOST or MB_TASKMODAL);
exit;
end;
...
end;
...
Думаю можно сделать контоль через WaitForMultipleObjects
Но ведь наверное можно как-то получить доступ к существующему таймеру? вот смотрю в мсдн на openwaitabletimer...
кто-нибудь так делал?
// Сначала
HANDLE SomeEvent = CreateEvent (NULL, FALSE, FALSE, NULL);

// Потом ждёшь
HANDLE handles [2] = { WaitableTimerHandle, SomeEvent };
DWORD result = WaitForMultipleObjects (2, handles, FALSE, INFINITE);
switch (result)
{
case WAIT_OBJECT_0 + 0:
// Дождались таймера
break;

case WAIT_OBJECT_0 + 1:
// Пора сваливать
break;

default:
// Что-то пошло не так
break;
}

// В неком другом потоке
SetEvent (SomeEvent);

Комментариев нет:

Отправить комментарий