前言
本文主要給大家介紹了關于C++定時器Timer在項目使用的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧
1、情況說明
由于最近要在項目里做彈出彈幕,要求是彈出1秒后消失,一開始我使用空循環進行計時,發現執行到這段代碼CPU占用率上升十幾個百分點,后來改成定時器實現,發現CPU表現正常。
2、空循環實現
ShowWindow(true);time_t start_time = GetTickCount();time_t now_time = start_time;while((now_time - start_time) <= 1000){now_time = GetTickCount();};ShowWindow(false);后來查了一下資料,空循環為啥使CPU占用率大幅升高,空循環執行快,在一個單位時間內會被調度很多次;再者是因為現在cpu占用率的算法。
3、定時器實現
首先要包含<Windows.h>
可以設置定時器,也可以殺死它。
每個定時器都有一個id,設置定時器的時候可以自己設置它,方便后面定時器的管理。
設置定時器的時候需要設置回調函數。
這部分代碼如下
#include<Windows.h>void CALLBACK HideWnd(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);//回調函數聲明//這2行在需要調用的時候調用,比如需要彈幕彈出來的時候。ShowWindow(true);SetTimer(m_hWnd,1, 1000, HideWnd);void CALLBACK HideWnd(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)//回調函數{ ShowWindow(hwnd, false); KillTimer(hwnd,1);}我這里在回調里面把定時器殺死了,這就實現了單次執行。若是想每隔1秒執行一次回調,可以不在回調中殺死定時器,在合適的地方再管理它。定時器每到時間,都會發WM_TIME消息,我們也可以響應這個消息去處理,這樣可以不用在回調中寫code。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。
新聞熱點
疑難解答
圖片精選