C++定時(shí)器Timer在項(xiàng)目中的使用方法
前言
本文主要給大家介紹了關(guān)于C++定時(shí)器Timer在項(xiàng)目使用的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
1、情況說(shuō)明
由于最近要在項(xiàng)目里做彈出彈幕,要求是彈出1秒后消失,一開(kāi)始我使用空循環(huán)進(jìn)行計(jì)時(shí),發(fā)現(xiàn)執(zhí)行到這段代碼CPU占用率上升十幾個(gè)百分點(diǎn),后來(lái)改成定時(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);
后來(lái)查了一下資料,空循環(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)用,比如需要彈幕彈出來(lái)的時(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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- C++11實(shí)現(xiàn)簡(jiǎn)易定時(shí)器的示例代碼
- C++控制臺(tái)用定時(shí)器實(shí)例代碼
- C++?超詳細(xì)分析數(shù)據(jù)結(jié)構(gòu)中的時(shí)間復(fù)雜度
- C++11時(shí)間日期庫(kù)chrono的使用
- c++11多種格式時(shí)間轉(zhuǎn)化為字符串的方法實(shí)現(xiàn)
- C++使用chrono庫(kù)處理日期和時(shí)間的實(shí)現(xiàn)方法
- 最短時(shí)間學(xué)會(huì)基于C++實(shí)現(xiàn)DFS深度優(yōu)先搜索
- C++定時(shí)器實(shí)現(xiàn)和時(shí)間輪介紹
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)掃雷小游戲的示例代碼
這篇文中主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典的掃雷小游戲。掃雷小游戲主要是利用字符數(shù)組、循環(huán)語(yǔ)句和函數(shù)實(shí)現(xiàn),感興趣的小伙伴可以了解一下2022-10-10
完全掌握C++編程中構(gòu)造函數(shù)使用的超級(jí)學(xué)習(xí)教程
這篇文章主要介紹了C++中的構(gòu)造函數(shù),包括C++11標(biāo)準(zhǔn)中的新特性的介紹,十分推薦!需要的朋友可以參考下2016-01-01
MySQL系列教程之使用C語(yǔ)言來(lái)連接數(shù)據(jù)庫(kù)
c語(yǔ)言操作Mysql數(shù)據(jù)庫(kù),主要就是為了實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查等操作,下面這篇文章主要給大家介紹了關(guān)于MySQL系列教程之使用C語(yǔ)言來(lái)連接數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)
這篇文章主要介紹了C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
C語(yǔ)言對(duì)組文件處理的相關(guān)函數(shù)小結(jié)
這篇文章主要介紹了C語(yǔ)言對(duì)組文件處理的相關(guān)函數(shù)小結(jié),包括setgrent()函數(shù)和getgrent()函數(shù)以及endgrent()函數(shù),需要的朋友可以參考下2015-08-08

