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。