用于需要定時執(zhí)行操作的程序,WINAPI的程序;
1、設(shè)置定時事件
MMRESULT timeSetEvent( UINT uDelay ,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UINT uResolution ,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?LPTIMECALLBACK fptc ,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DWORD dwUser ,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UINT fuEvent );
uDelay:以毫秒指定事件的周期。
uResolution :以毫秒指定延時的精度,數(shù)值越小定時器事件分辨率越高。缺省值為1ms。
fptc :指向一個回調(diào)函數(shù)。
dwUser :存放用戶提供的回調(diào)數(shù)據(jù)。
fuEvent :指定定時器事件類型:
? ? ? ? ? ? ? ? TIME_ONESHOT:uDelay毫秒后只產(chǎn)生一次事件
? ? ? ? ? ? ? ? TIME_PERIODIC :每隔uDelay毫秒周期性地產(chǎn)生事件。
2、注銷定時事件
MMRESULT timeKillEvent(UINT uTimerID) ;
其中uTimerID是timeSetEvent的返回值,是事件的ID號,timeSetEvent必須返回ID號用于注銷;
3、回調(diào)函數(shù)
void WINAPI fptc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
? ? ? ? ? ? ?//需要執(zhí)行的操作
}
回調(diào)的參數(shù)如不需要用到可不管,但是函數(shù)定義的參數(shù)類型和數(shù)量必須按照這個格式;
使用方法:
1、頭文件和庫必須加載
#include <Windows.h>
#include <Mmsystem.h>
#pragma comment(lib, "Winmm.lib")
2、注冊回調(diào)事件
MMRESULT timer_id;
timer_id = timeSetEvent(1000, 1, (LPTIMECALLBACK)TimeCallbackFuction, 1, TIME_PERIODIC);
其中,1000表示1秒;1表示精度為1毫秒;TimeCallbackFuction是回調(diào)函數(shù),定時執(zhí)行的程序?qū)懺诶锩妫?是用戶數(shù)據(jù),這里我沒用到,隨便寫了個;TIME_PERIODIC表示間隔前面設(shè)定的那個時間不斷循環(huán)執(zhí)行;
3、回調(diào)函數(shù)執(zhí)行
void WINAPI TimeCallbackFuction(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
? ? ? ? ? ? ? //需要執(zhí)行的操作
}
回調(diào)函數(shù)里寫你的操作;
4、最后不需要使用定時器時需要注銷掉;
timeKillEvent(timer_id);
timer_id是前面創(chuàng)建獲取的ID號;