CreateTimerQueueTimer学习笔记 .

           定时器队列(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;
}

发布了41 篇原创文章 · 获赞 5 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章