您好,登錄后才能下訂單哦!
前言
本文主要給大家介紹了關(guān)于C++定時(shí)器Timer在項(xiàng)目使用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
1、情況說明
由于最近要在項(xiàng)目里做彈出彈幕,要求是彈出1秒后消失,一開始我使用空循環(huán)進(jìn)行計(jì)時(shí),發(fā)現(xiàn)執(zhí)行到這段代碼CPU占用率上升十幾個(gè)百分點(diǎn),后來改成定時(shí)器實(shí)現(xiàn),發(fā)現(xiàn)CPU表現(xiàn)正常。
2、空循環(huán)實(shí)現(xiàn)
ShowWindow(true); time_t start_time = GetTickCount(); time_t now_time = start_time; while((now_time - start_time) <= 1000) { now_time = GetTickCount(); }; ShowWindow(false);
后來查了一下資料,空循環(huán)為啥使CPU占用率大幅升高,空循環(huán)執(zhí)行快,在一個(gè)單位時(shí)間內(nèi)會(huì)被調(diào)度很多次;再者是因?yàn)楝F(xiàn)在cpu占用率的算法。
3、定時(shí)器實(shí)現(xiàn)
首先要包含<Windows.h>
可以設(shè)置定時(shí)器,也可以殺死它。
每個(gè)定時(shí)器都有一個(gè)id,設(shè)置定時(shí)器的時(shí)候可以自己設(shè)置它,方便后面定時(shí)器的管理。
設(shè)置定時(shí)器的時(shí)候需要設(shè)置回調(diào)函數(shù)。
這部分代碼如下
#include<Windows.h> void CALLBACK HideWnd(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);//回調(diào)函數(shù)聲明 //這2行在需要調(diào)用的時(shí)候調(diào)用,比如需要彈幕彈出來的時(shí)候。 ShowWindow(true); SetTimer(m_hWnd,1, 1000, HideWnd); void CALLBACK HideWnd(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)//回調(diào)函數(shù) { ShowWindow(hwnd, false); KillTimer(hwnd,1); }
我這里在回調(diào)里面把定時(shí)器殺死了,這就實(shí)現(xiàn)了單次執(zhí)行。若是想每隔1秒執(zhí)行一次回調(diào),可以不在回調(diào)中殺死定時(shí)器,在合適的地方再管理它。定時(shí)器每到時(shí)間,都會(huì)發(fā)WM_TIME消息,我們也可以響應(yīng)這個(gè)消息去處理,這樣可以不用在回調(diào)中寫code。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。