等待定时器内核对象

来源:互联网 发布:发卡平台源码2016免费 编辑:程序博客网 时间:2024/05/16 17:43
相关函数:
CreateWaitableTimer(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCTSTR lpTimerName);
参数:
lpTimerAttributes:一个结构体,用于设置对象的安全特性
bManualReset:如果为TRUE,表示创建一个人工重置计时器;如果为FALSE,则创建一个自动重置计时器
lpTimerName:指定可等待计时器对象的名称
如果已经存在一个拥有这个名字的可等待计时器,就直接打开现成的可等待计时器。
返回值:
如执行成功,返回可等待计时器对象的句柄;零表示出错。如果GetLastError返回ERROR_ALREADY_EXISTS表示同名的计时器对象已经存在。

SetWaitableTimer(HANDLE hTimer, 
const LARGE_INTEGER *pDueTime, 
LONG lPeriod, 
PTIMERAPCROUTINE pfnCompletionRoutine, 
LPVOID lpArgToCompletionRoutine, 
BOOL fResume);
参数:
hTimer:指定你要设置的定时器
pDueTime:表示第一次触发的时间
lPeriod:表示每隔多长时间触发一次
pfnCompletionRoutine:表示回调函数
lpArgToCompletionRoutine:表示传入回调函数的参数
fResume:如果为TRUE,而且系统支持电源管理,那么在计时器触发的时候,系统会退出省电模
式。如设为TRUE,但系统不支持省电模式,GetLastError就会返回ERROR_NOT_SUPPORTED 适用平台。一般设为FALSE

CancelWaitableTimer(HANDLE hTimer);
该函数用于取消一个可以等待下去的计时器,除非以后再调用SetWaitableTimer来对它进行重置,否则它将一直保持它当前的状态。

CloseHandle(HANDLE hObject);
关闭计时器对象句柄。
#include <Windows.h>#include <iostream>using namespace std;HANDLE hTimer = NULL;LARGE_INTEGER liDueTime;DWORD WINAPI MyThreadProc(LPVOID lpParam){while (TRUE) {if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0) {CloseHandle(hTimer);cout << "出错,退出!" << endl;break;} else {//10秒钟到达SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0);//将hTimer信息重置为无信号,如果不然就会不断的输出cout << "10秒钟定时器到了!" << endl;}}return 0L;}int main(){//设置相对时间为10秒liDueTime.QuadPart = -100000000;//创建一个人工重置的定时器hTimer = CreateWaitableTimer(NULL, TRUE, TEXT("TestWaitableTimer"));if (!hTimer) {return -1;}HANDLE hThread = CreateThread(NULL, 0, MyThreadProc, NULL, 0, NULL);CloseHandle(hThread);cout << "10秒钟定时器创建成功!" << endl;// 设置10秒钟if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0)) {CloseHandle(hTimer);}system("pause");return 0;}


0 0