CreateWaitableTimer和SetWaitableTimer声明如下:
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerA(
__in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
__in BOOL bManualRe,
__in_opt LPCSTR lpTimerName
);
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerW(
__in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
__in BOOL bManualRe,
__in_opt LPCWSTR lpTimerName
);
#def UNICODE
# CreateWaitableTimer CreateWaitableTimerW
#
# CreateWaitableTimer CreateWaitableTimerA
#end // !UNICODE
WINBASEAPI
BOOL
WINAPI
SetWaitableTimer(
__in HANDLE hTimer,
__in const LARGE_INTEGER *lpDueTime,
__in LONG lPeriod,
__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
__in_opt LPVOID lpArgToCompletionRoutine,
__in BOOL fResume
);
lpTimerAttributes是设置定时器属性
bManualRe是是否手动复位
lpTimerName是定时器名称
hTimer是定时器句柄
lpDueTime是设置定时器时间间隔当设置为正值是绝对时间;当设置为负数是相对时间
lPeriod是周期
pfnCompletionRoutine是设置回调
lpArgToCompletionRoutine是传送给回调参数
fResume是设置系统是否自动恢复
例子如下:
#001 //创建定时器
#002 //蔡军生 2007/11/06 QQ:9073204 深圳
#003 CreateTestTimer(void)
#004 {
#005 HANDLE hTimer = NULL;
#006 LARGE_INTEGER liDueTime;
#007
#008 //设置相对时间为10秒
#009 liDueTime.QuadPart = -100000000;
#010
#011 //创建定时器
#012 hTimer = CreateWaitableTimer(NULL, TRUE, _T("TestWaitableTimer"));
#013 (!hTimer)
#014 {
#015 1;
#016 }
#017
#018 OutputDebugString(_T("10秒定时器\r\n"));
#019
#020 // 设置10秒钟
#021 (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
#022 {
#023 //
#024 CloseHandle(hTimer);
#025 2;
#026 }
#027
#028 //等定时器有信号
#029 (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
#030 {
#031 OutputDebugString(_T("10秒定时器出错了\r\n"));
#032 //
#033 CloseHandle(hTimer);
#034 3;
#035 }
#036
#037 {
#038 //10秒钟到达
#039 OutputDebugString(_T("10秒定时器到了\r\n"));
#040 }
#041
#042 //
#043 CloseHandle(hTimer);
#044 0;
#045 }
最新评论