[New - Windows NT]
SetWaitableTimer功能激活指定的“等待”定时器。当到达时间到达时,定时器发出信号,设置定时器的线程调用可选的完成例程。
BOOL SetWaitableTimer(
HANDLE 【hTimer】, | //处理定时器对象 |
const LARGE_INTEGER 【*pDueTime】, | //当定时器变成信号时 |
LONG【lPeriod】, | //周期性定时器间隔 |
PTIMERAPCROUTINE 【pfnCompletionRoutine】, | //指向完成例程的指针 |
LPVOID 【lpArgToCompletionRoutine】, | //数据传递到完成例程 |
BOOL 【fResume】 | //标志为恢复状态 |
); |
参数
【hTimer】
标识定时器对象。CreateWaitableTimer或OpenWaitableTimer函数返回此句柄。
【pDueTime】
指定何时将定时器的状态设置为发信号,以100纳秒为间隔。使用FILETIME结构描述的格式。正值表示绝对时间。负值表示相对时间。实际的定时精度取决于硬件的能力。
【lPeriod】
指定定时器的周期,单位为毫秒。如果【lPeriod】为零,则定时器发出一次信号。如果【lPeriod】大于0,定时器是周期性的。周期性定时器在每次使用时间段内自动重新激活,直到使用CancelWaitableTimer函数取消定时器或使用SetWaitableTimer复位。如果【lPeriod】小于0,则该函数失败。
【pfnCompletionRoutine】
指定可选的完成例程。完成例程有以下原型:
VOID
(APIENTRY *PTIMERAPCROUTINE)(
LPVOID lpArgToCompletionRoutine,
DWORD dwTimerLowValue,
DWORD dwTimerHighValue
);
定时器激活时,在【lpArgToCompletionRoutine】参数中指定完成例程的参数。完成例程还需要两个DWORD值,指定定时器发出信号的时间的高低时间值。这些值由系统使用FILETIME格式传递给例程。
【lpArgToCompletionRoutine】
指向传递给由指针【pfnCompletionRoutine】指定的函数的结构的指针。
【fResume】
指定当定时器状态设置为发信号时,是否将系统恢复为暂停节电模式。如果在不支持还原的平台上【fResume】为TRUE,则呼叫将成功,但GetLastError返回ERROR_NOT_SUPPORTED。
回报值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
计时器最初无效。定时器通过调用SetWaitableTimer激活。如果调用SetWaitableTimer时定时器已经激活,则定时器停止,然后重新激活。以这种方式停止定时器不会将定时器状态设置为发信号,因此在定时器的等待操作中阻塞的线程保持阻塞。
当指定的到期时间到达时,定时器变为无效。定时器的状态设置为发出信号,定时器使用指定的周期重新激活,线程调用完成例程。如果您调用SetWaitableTimer并且线程不处于可警告状态,则完成例程将被取消。
当手动复位定时器设置为信号状态时,它将保持在此状态,直到SetWaitableTimer被调用来重置定时器。因此,当初始到期时间到达时,定期手动复位定时器被设置为信号状态,并保持信号,直到被取消或复位为止。当同步定时器设置为信号状态时,它将保持在此状态,直到线程完成对定时器对象的等待操作。
也可以看看
CancelWaitableTimer,CreateWaitableTimer,FILETIME,OpenWaitableTimer