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

 

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