1. 程式人生 > >Settimer及回調函數的用法

Settimer及回調函數的用法

ack 控制 dog 沒有 Nid func baidu settime art

  在網上看了settimer的一些用法發現能用的真沒有,,,,可能是我沒找對地方,大部分都是無腦復制粘貼,浪費了很多時間,如果你是一個對這種定時器一無所知的小白,那麽請你看進來一定不會讓你失望的!

  1. 實用settimer的第一步引入頭文件:#include <Windows.h>

  2. 然後我們來看一下settimer及其回調函數的使用:  

      首先我們來看settimer的原型:(如下所示)(這個僅僅是窗口的一個定時器函數,我們現在是想把它用到控制臺程序的而一般沒有窗口的線程系統是不會給他指定消息隊列的)

1 UINT_PTR SetTimer(
2 HWND hWnd, //
窗口句柄 3 UINT_PTR nIDEvent, // 定時器ID,多個定時器時,可以通過該ID判斷是哪個定時器 4 UINT nElapse, // 時間間隔,單位為毫秒 5 TIMERPROC lpTimerFunc // 回調函數 6 }

      其函數的參數意義就如同上面所說的一樣,我們常用的用法是SetTimer(m_hWnd,1,1000,NULL); //一個1秒觸發一次的定時器(在MFC中是不一樣的這一點要註意),若最後一個參數是NULL,那麽則默認調用的是ontime函數,但是當我們要調用我們自己的回調函數時可以用如下的函數:void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime) { 裏面寫下自己的內容 };網上大部分就是寫到這裏其實只但這裏我們並不能成功的調用自己的回調函數,還要經過如下操作才可以:(雖然使用了SetTimer,但是沒有對WM_TIMER消息進行分發,所以不會觸發回調函數)

 1 void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)  
 2 {  
 3   printf("%s","abc");  
 4      
 5 }  
 6 void main()  
 7 {  
 8     SetTimer(0, 0, 1000, &TimerProc);  
 9     MSG   msg;     
10     while(GetMessage(&msg,NULL,0,0))     
11     {     
12         if(msg.message==WM_TIMER)     
13 { 14 DispatchMessage(&msg); 15 } 16 } 17 }

      其中的DispatchMessage(&msg)就是分發消息,對vM_TIMER消息進行分發,分發到回調函數

參考文章:https://blog.csdn.net/dog250/article/details/5303603

Settimer及回調函數的用法