C++ 定时器Timer在项目中的使用
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。
C++ 定时器Timer在项目中的使用的更多相关文章
- java web 项目中 简单定时器实现 Timer
java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报 分类: JAVA(24) 版权声明:本文为博 ...
- spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
最近做了一个java的项目,部门领导给了一套代码让我尽快掌握,说心里话本人真心不喜欢java的这种项目方式,各种配置各种xml文件简直头都大了,下面就将我遇到的其中一个我认为是坑的地方整理出来,希望能 ...
- WPF中定时器Timer与DispatcherTimer的用法
最近的工作项目中需要定时更新UI控件中的数据,这时候第一反应肯定会想到去使用System.Timers.Timer定时更新UI控件,但是程序运行后,会发现程序崩溃了.报的异常为“调用线程无法访问此对象 ...
- Java中定时器Timer致命缺点(附学习方法)
简介 这篇文章我一直在纠结到底要不要写,不想写一来因为定时器用法比较简单,二来是面试中也不常问.后来还是决定写了主要是想把自己分析问题思路分享给大家,让大家在学习过程中能够参考,学习态度我相信大部分人 ...
- vue 项目中,定时器(setInterval)的写法
vue 项目中,定时器(setInterval)的写法: fetchJobList是一个方法,里面有dispatch一个action进行请求接口的代码. data () { return { inte ...
- oracle定时器在项目中的应用
业务需求: 现在业务人员提出了一个需求: 在项目中的工作流,都要有一个流程编号,此编号有一定的规则: 前四五位是流程的字母缩写,中间是8位的日期,后面五位是流水码,要求流水码每天从00001开始.即: ...
- python中实现定时器Timer
实现定时器最简单的办法是就是循环中间嵌time.sleep(seconds), 这里我就不赘述了 # encoding: UTF-8 import threading #Timer(定时器)是Thre ...
- Python--day41--threading中的定时器Timer
定时器Timer:定时开启线程 代码示例: #定时开启线程 import time from threading import Timer def func(): print('时间同步') #1-3 ...
- PHP框架Swoole的一个定时器Timer特性
在各种业务型系统中,往往需要服务器在后台扫描相关数据,触发相应的统计.通知等操作. 比如对于一个项目管理系统,需要每天的特定时间内,统计每项任务的执行.到期情况.整个项目的进度等等,根据统计情况,做相 ...
随机推荐
- 2018.07.03 POJ 3348 Cows(凸包)
Cows Time Limit: 2000MS Memory Limit: 65536K Description Your friend to the south is interested in b ...
- 2018.07.08 hdu5316 Magician(线段树)
Magician Problem Description Fantasy magicians usually gain their ability through one of three usual ...
- HDU 1106 排序 (排序+处理字符串)
题意:略. 析:按照题目说的,把字符串分割,然后把字符串转成十进制,存起来,可以用数组,我用的向量, 排序一下就OK了.注意的是,要考虑多个5相邻的时候,刚开始没考虑WA了一次. 代码如下: #inc ...
- Before an Exam
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93241#problem/B (654123) http://codeforces.com ...
- (最短路 Floyd)Cow Contest --POJ--3660
链接: http://poj.org/problem?id=3660 思路: 1. 1->2->3==1->3 2. 记录每次的比赛人员 3. 每个人只能跟他序号不同的人比赛, ...
- paip.双网卡多网卡不能上网的联网配置
paip.双网卡多网卡不能上网的联网配置 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- Python学习-40.Python中的迭代
在上一篇中,我们使用了生成器来创建了一个可遍历的对象.在其中,我们使用了yield关键字. Python我也正在学习中,因此对yield的本质我并不熟悉,但是,在C#中,yield关键字则是语法糖,其 ...
- Redis键迁移
Redis键迁移 在使用Redis的过程中,很多时候我们会遇到需要进行键迁移的问题,需要将指定Redis中的指定数据迁移到其他Redis当中,键迁移有三种方法,我们来进行一一介绍. 一.move ...
- ipad协议7.0,与大佬们分享几套新老版本的协议源码及算法,交流心得。
- ASP.NET MVC 富文本Ueditor编辑 后台传值前端乱码解决方案
只是将当前内容String当成Html插入,我想是跟数据类型转换差不多 //把内容赋值给ueditor var ue = UE.getEditor('editor');//实例化 ue.ready(f ...