在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