溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++定時(shí)器Timer在項(xiàng)目中的使用方法

發(fā)布時(shí)間:2020-10-07 11:44:50 來源:腳本之家 閱讀:264 作者:woniu-felix 欄目:編程語言

前言

本文主要給大家介紹了關(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à)值,謝謝大家對億速云的支持。

向AI問一下細(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)容。

AI