Windows C — 设置定时器

在Windows  C下采用timeSetEvent函数来设置定时器。

关于timeSetEvent的函数原型及注释如下所示:

MMRESULT timeSetEvent(
  UINT           uDelay,       // 定时事件的触发周期,单位为毫秒
  UINT           uResolution,  // 定时事件的精度,单位为毫秒;值越小精度越高,
  LPTIMECALLBACK lpTimeProc,   // 定时事件的回调函数,每周期就调用该回调函数
  DWORD_PTR      dwUser,       // 用户提供的回调数据,可以默认置为0
  UINT           fuEvent       // 定时器的类型
);

lpTimeProc:触发事件的回调函数,回调函数的声明如下:

void WINAPI CallBackFunc(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2); 
// uTimerID 为定时器的ID,

fuEvent:定时器的类型,分为以下两种类型:

                TIME_ONESHOT:当经过 uDelay 时间之后,只调用一次

                TIME_PERIODC:周期执行,每经过 uDelay 时间,就调用一次

返回值:当函数执行成功,就返回该定时器的ID,如果失败则返回NULL 

 下面为 timeSetEvent 函数的应用示例:

#include <Windows.h>                //需要包含该头文件
#include <iostream>
using namespace std;

#pragma comment(lib,"Winmm.lib")	//For timeSetEvent

//定时器的回调函数
void WINAPI TimerCallback(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
	cout << ">>> 定时器回调函数" << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	DWORD_PTR dwUser = NULL;

    // 设置定时器
	int timerID = timeSetEvent(1000, 1, (LPTIMECALLBACK)TimerCallback, dwUser, TIME_PERIODIC);    
	if(timerID != NULL)
		cout << ">>> 定时器创建成功" << endl;

	char ch = '0';
	while(ch != 'q')
	{
		ch = getchar();
	}
	timeKillEvent(timerID);    //关闭定时器
	return 0;
}

不过,在MSDN上看到, timeSetEvent 函数已经过时了,现在都在用 CreateTimerQueueTimer 函数。

有时间在 讲述 CreateTimerQueueTimer 的相关概念吧。MSDN参考网址:https://msdn.microsoft.com/en-us/library/ms713423(VS.85).aspx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章