HANDLE render_event_ = CreateEvent( NULL, FALSE, FALSE, NULL );Создается событие с автопереключением (второй аргумент FALSE), чтобы не вызывать вручную ResetEvent.
Далее вызываем RegisterWaitForSingleObject:
RegisterWaitForSingleObject( &render_wait_obj_, render_event_, RenderCallback, SOME_USER_PARAM, 1000, 0 );Данным вызовом мы говорим вызывать функцию RenderCallback с аргументом SOME_USER_PARAM по событию render_wait_obj_, но не реже одного раза в 1000 миллисекунд. Возвращается render_wait_obj_ типа HANDLE, которое нужно передать в UnregisterWait, когда больше не нужно выполнять задачи зарегестрированного типа (например, при выходе из программы). Функция RenderCallback имеет следующий вид:
VOID CALLBACK RenderCallback( PVOID lpParameter, BOOLEAN TimerOrWaitFired )Когда нужно выполнить задачу RenderCallback просто вызываем SetEvent:
{
// Какие-то действия. Параметр TimerOrWaitFired помогает
// узнать причину вызова RenderCallback.
// Ничего связанного с пулом потоков тут делать не требуется.
}
SetEvent( render_event_ );