您的位置:首页 > 产品设计 > UI/UE

CreateTimerQueueTimer学习笔记 .

2014-04-04 12:44 495 查看
定时器队列(Timer Queue)可以使用CreateTimerQueue函数创建。定时器队列中的定时器是轻量级对象,可以在一定时间间隔之后调用指定的回调函数(可以只调用一次,也可以是周期性的)。这种等待操作由线程池中某个线程处理的(系统级别)。

向定时器队列中添加定时器可以使用CreateTimerQueueTimer函数。更新一个计时器队列中的计时器可以使用 ChangeTimerQueueTimer 函数。这两个函数中你可以指定一个回调函数,如果设定时间到达,线程池中某个线程会调用该回调函数。

使用 DeleteTimerQueueTimer函数可以取消挂起的计时器。当不再使计时器队列的时候,调用 DeleteTimerQueueEx 函数删除计时器队列,该函数调用是会取消并删除任何在该队列中等待的计时器。

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <tchar.h>

using namespace std;

//事件对象
HANDLE g_Event = NULL;
static  int COUNT = 0;

VOID CALLBACK TimerRoutine( PVOID lpParameter, BOOLEAN TimerOrWaitFired )
{
if(NULL == lpParameter)
{
OutputDebugString(_T("lpParameter is null。。"));
return;
}

printf("the values of param is :%d\n",*(int*)lpParameter);
COUNT++;

/*if(COUNT >= 3)
{
SetEvent(g_Event);
}*/
}

int main(int argc,TCHAR *argv[])
{
HANDLE hTimer= NULL;
HANDLE hTimerQueue = NULL;
int arg = 123;
g_Event = CreateEvent(NULL,TRUE,FALSE,NULL);
if(NULL == g_Event)
{
OutputDebugString(_T("CreateEvent失败。。"));
return 1;
}

hTimerQueue = CreateTimerQueue();
if(NULL == hTimerQueue)
{
OutputDebugString(_T("CreateTimerQueue失败。。"));
return 1;
}

if(!CreateTimerQueueTimer(&hTimer,hTimerQueue,WAITORTIMERCALLBACK(TimerRoutine),&arg,5000,1000,NULL))
{
OutputDebugString(_T("CreateTimerQueueTimer失败。。"));
return 1;
}

if(WaitForSingleObject(g_Event,INFINITE) !=WAIT_OBJECT_0)
{
OutputDebugString(_T("WaitForSingleObject失败。。"));
}

CloseHandle(g_Event);

if(!DeleteTimerQueue(hTimerQueue))
{
OutputDebugString(_T("DeleteTimerQueue失败。。"));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: