用timeSetEvent吧 經常用于編解碼的定時器
MMRESULT timeSetEvent( UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
WORD dwUser,
UINT fuEvent )
uDelay:以毫秒指定事件的周期。
Uresolution:以毫秒指定延時的精度,數值越小定時器事件分辨率越高。缺省值為1ms。
LpTimeProc:指向一個回調函數。
DwUser:存放用戶提供的回調數據。
FuEvent:指定定時器事件類型:
TIME_ONESHOT:uDelay毫秒后只產生一次事件
TIME_PERIODIC :每隔uDelay毫秒周期性地產生事件。
在使用過程要注意幾點:
在初始化過程中有添加函數
UINT nID= ::timeSetEvent (1000, 5,CallBackFunc,(DWORD)this,TIME_PERIODIC);
其中函數的應用必須加入頭文件:#include "mmsystem.h"
#pragma comment(lib, "winmm.lib")
設置調用函數:
void PASCAL CallBackFunc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
//printf("11111111111\\n");
//exit(0);
//在此處調用你要編寫的函數
多媒體定時器的使用方法:
1、時鐘的設定:使用前首先將該定時器的系統時鐘設定為當地時間方可使用。此定時器有鍵盤自動上鎖功能,連按開鎖/時鐘鍵4次,使屏幕左下角的加鎖標志“”消失,按星期鍵校正星期,按時鍵校正時,按分鍵校正分,如果15秒無鍵盤操作自動上鎖,屏顯回到時鐘狀態。
2、星期模式設定:在開鎖狀態下,按設定鍵進入設定狀態,依次按星期鍵,可以選擇星期控制模式:如:星期顯示:一 二 三 四 五 六 日,控制模式為每天相同;星期顯示:一 二 三 四 五 ,控制模式為星期一至星期五相同。
3、定時編程: 在開鎖狀態下,按設定鍵,系統進入編程狀態,屏幕顯示為1.ON、即進入第一個程序編輯狀態,屏幕顯示此時調整時間為第一個程序的開啟時間。
4、手動操作和操作方法:如需要,該定時器可以用手動操作使定時開關處于常開或常關狀態。方法為在開鎖狀態下,按清除/手動鍵,使屏幕下方的字符轉換為開,即定時器常開,轉為關則定時器常關。
二、故障現象:
1、如果本開關某一天該開的時間沒開,或者開了以后到關的時間還沒關,那可能是因為作定時設置的“星期”沒調對,請按照"定時設置"中介紹的方法檢查或重調。
2、如果確認“開啟”和“關閉”時間調得完全正確,開關仍然動作不正常,或者不該關的時候被關掉,那可能是因為多余的幾組開關時間沒有消除,請參照“定時設置”中介紹的方法消除(注意:開關時間顯示“--:--”才能表示消除,不要認為“00:00"表示消除)。
3、如果以上兩條全部正確,而本開關仍然動作不正常,有可能是"自動/手動"鍵被人為動作,檢查"開、自動、關"的標志,將其調到當前時間所處的狀態,再調回到自動位置。
你好,多媒體定時器不依賴消息機制,而是有TimeSetEvent()產生一個獨立的線程,在一定的中斷次數到達后,直接調用預先設置的回調函數進行處理,而不必等待應用程序的消息隊列為空,保證的定時器的實時相應,是一種很理想的高精度定時器,可以實現精度為1ms的定時精度。
1、利用QueryPerformanceFrequency()函數去獲取計算機CPU的時鐘頻率;
多媒體定時器的使用
2、在采樣周期定時的起始和終止處,分別調用QueryPerformanceCounter()獲得兩次CPU的時鐘頻率計數值,分別記為Num1和Num2,再將計數值轉換成時間間隔,如果時鐘頻率為Freq,那么時間間隔interval=(Num2-Num1)/Freq,如果應用程序判別到interval值大于等于定時采樣周期時,那么終止延遲或定時子程序的調用。
希望我的回答能幫助到你