日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Settimer及回调函数的用法

發布時間:2023/12/19 综合教程 46 生活家
生活随笔 收集整理的這篇文章主要介紹了 Settimer及回调函数的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

然后我們來看一下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 CALLBACKTimerProc(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消息進行分發,分發到回調函數,在其中要注意GetMessage()是阻塞的,這個函數會一直等待消息知道收到消息為止,而非阻塞的是函數PeekMessage()函數,僅僅是檢測是否有消息而不是一直等待消息。

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

總結

以上是生活随笔為你收集整理的Settimer及回调函数的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。