1 )用wm_timer來設定定時器 先請看settimer這個api函式的原型
uint_ptr settimer(
hwnd hwnd, // 視窗控制代碼
uint_ptr nidevent, // 定時器id,多個定時器時,可以通過該id判斷是哪個定時器
uint uelapse, // 時間間隔,單位為毫秒
timerproc lptimerfunc // **函式 );
例如 settimer(m_hwnd,1,1000,null); //乙個1秒觸發一次的定時器 在mfc程式中settimer被封裝在cwnd類中,呼叫就不用指定視窗控制代碼了 於是settimer函式的原型變為: uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,uint ,dword)) 當使用settimer函式的時候,就會生成乙個計時器。函式中nidevent指的是計時器的標識,也就是名字。nelapse指的是時間間隔, 也就是每隔多長時間觸發一次事件。第三個引數是乙個**函式,在這個函式裡,放入你想要做的事情的**,你可以將它設定為null, 也就是使用系統預設的**函式,系統預設認的是ontime函式。這個函式怎麼生成的呢?你需要在需要計時器的類的生成ontime函式: 在classwizard裡,選擇需要計時器的類,新增wm_time訊息對映,就自動生成ontime函式了。然後在函式裡新增**,讓**實現功能。 每隔一段時間就會自動執行一次。
settimer計時器是系統資源,使用完畢應及時用killtimer銷毀,關於settimer的返回值:如果hwnd為null,返回值為新建立的timer的id,如果hwnd非null,返回乙個非0整數,如果settimer呼叫失敗則返回0 ,簡言之,settimer的返回值用於將來的銷毀。
settimer(1,1000,null); 1:計時器的名稱; 1000:時間間隔,單位是毫秒; null:使用ontime函式。 當不需要計時器的時候呼叫killtimer(nidevent); 例如:killtimer(1); 2) 呼叫**函式 此方法首先寫乙個如下格式的**函式 void callback timerproc(hwnd hwnd,uint nmsg,uint ntimerid,dword dwtime); 然後再用settimer(1,100,timerproc)函式來建乙個定時器,第三個引數就是**函式位址。 二. 或許你會問,如果我要加入兩個或者兩個以上的 timer怎麼辦? 繼續用settimer函式吧,上次的timer的id是1,這次可以是2,3,4。。。。 settimer(2,1000,null); settimer(3,500,null); 嗯,windows會協調他們的。當然ontimer函式體也要發生變化,要在函式體內新增每乙個timer的處理**: ontimer(nidevent)
例2:
for(int i = 0; i< 100000; i++)
//如果這個迴圈執行時間遠超過了這個二秒的定時器,是不是也要一直執行完這個迴圈後,再過兩秒後才會進入ontime()函式?
1。應該是這樣的,設定定時器應該只要一次就夠了,只要不killtimer()。系統每隔2秒都會自動呼叫ontimer()
2。如果來一次定時器訊息對應的函式所需要的cpu工作時間會超過2秒的話,系統也會繼續執行本次訊息對應的函式,不管需要多長時間都會繼續執行;當執行完成了本次定時器訊息函式後,系統會立即呼叫下一次定時器訊息,也就是實際的定時器訊息間隔時間應該是定時器設定時間減去本次定時器訊息函式執行所需要的時間,如果你的訊息函式執行時間超過2秒的話,那麼系統執行完本次函式後,就會立即執行下一次定時器訊息,而基本不需要等待了
SetTimer函式的使用
settimer函式的用法 1 用wm timer來設定定時器 先請看settimer這個api函式的原型 uint ptr settimer hwnd hwnd,視窗控制代碼 uint ptr nidevent,定時器id,多個定時器時,可以通過該id判斷是哪個定時器 uint uelapse,時...
SetTimer函式的使用
什麼時候我們需要用到 settimer 函式呢?當你需要每個一段時間執行一件事的的時候就需要使用 settimer 函式了。使用定時器的方法比較簡單,通常告訴 windows 乙個時間間隔,然後 windows 以此時間間隔週期性觸發程式。通常有兩種方法來實現 傳送 wm timer 訊息和呼叫應用...
SetTimer定時器的用法
什麼時候我們需要用到settimer函式呢?當你需要每個一段時間執行一件事的的時候就需要使用settimer函式了。使用定時器的方法比較簡單,通常告訴windows乙個時間間隔,然後windows以此時間間隔週期性觸發程式。通常有兩種方法來實現 傳送wm timer訊息和呼叫應用程式定義的 函式。1...