C++ 定时器Timer在项目中的使用

栏目: C++ · 发布时间: 5年前

内容简介:本文永久更新链接地址:

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。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址: https://www.linuxidc.com/Linux/2019-04/158399.htm


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Convergence Culture

Convergence Culture

Henry Jenkins / NYU Press / 2006-08-01 / USD 30.00

"Convergence Culture" maps a new territory: where old and new media intersect, where grassroots and corporate media collide, where the power of the media producer, and the power of the consumer intera......一起来看看 《Convergence Culture》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换