The SetWaitableTimer function activates the specified “waitable” timer. When the due time arrives, the timer is signaled and the thread that set the timer calls the optional completion routine.
BOOL SetWaitableTimer(
HANDLE hTimer, |
// handle to a timer object |
const LARGE_INTEGER *pDueTime, |
// when timer will become signaled |
LONG lPeriod, |
// periodic timer interval |
PTIMERAPCROUTINE pfnCompletionRoutine, |
// pointer to the completion routine |
LPVOID lpArgToCompletionRoutine, |
// data passed to the completion routine |
BOOL fResume |
// flag for resume state |
); |
VOID (APIENTRY *PTIMERAPCROUTINE)( LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue );
The argument for the completion routine is specified when the timer is made active, in the lpArgToCompletionRoutine parameter. The completion routine also takes two DWORD values that specify the high and low time values of the time at which the timer was signaled. These values are passed to the routine by the system using the FILETIME format.
For more information, see Asynchronous
Procedure Calls.
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Timer are initially inactive. Timers are activated by calling SetWaitableTimer. If the timer is already active when you call SetWaitableTimer, the timer is stopped, then it is reactivated. Stopping the timer in this manner does not set the timer state to signaled, so threads blocked in a wait operation on the timer remain blocked.
When the specified due time arrives, the timer becomes inactive. The state of the timer is set to signaled, the timer is reactivated using the specified period, and the thread calls the completion routine. If you call SetWaitableTimer and the thread is not in an alertable state, the completion routine is canceled.
When a manual-reset timer is set to the signaled state, it remains in this state until SetWaitableTimer is called to reset the timer. As a result, a periodic manual-reset timer is set to the signaled state when the initial due time arrives and remains signaled until it is canceled or reset. When a synchronization timer is set to the signaled state, it remains in this state until a thread completes a wait operation on the timer object.
CancelWaitableTimer, CreateWaitableTimer, FILETIME, OpenWaitableTimer