文档章节

C++中Timer的用法

colorlesswind
 colorlesswind
发布于 2015/06/05 11:29
字数 364
阅读 5530
收藏 2

1. 使用windows api函数SetTimer设定计时器

UINT_PTR SetTimer( 
HWND hWnd,   //   窗口句柄 
UINT_PTR nIDEvent,   //   定时器ID,多个定时器时,可以通过该ID判断是哪个定时器 
UINT uElapse,   //   时间间隔,单位为毫秒 
TIMERPROC lpTimerFunc   //   回调函数 
); 
 //如果已传入参数nIDEvent,则函数的返回值与nIDEvent相同,如果参数nIDEvent为NULL,则函数的返回值为系统为这
//个定时器设定的一个ID

注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序可能会出现问题。

2. 编写Timer的回调函数

void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nTimerid, DWORD dwTime);
//hWnd: 与SetTimer中所传入的hWnd一致
//nMsg: WM_TIMER消息
//nTimerid: 计时器编号
//dwTime: 从系统启动到现在的时间(用毫秒表示),这是由GetTickCount函数所返回的

3. 在使用完计时器后必须调用“KillTimer(NULL, iTimerID)”来销毁计时器

Sample code
#include <iostream>
#include <windows.h>

void CALLBACK TimerProc(HWND hwnd, UINT Msg, UINT idEvent, DWORD dwTime);

int main()
{
 UINT timerId = 1;
 MSG msg;
 
// int n = GetMessage(&msg, NULL, NULL, NULL);  //Wait for message, block the thread when getting no message

 SetTimer(NULL, timerId, 1000, TimerProc);  //每间隔1000毫秒定时器发送 一条信息,并执行回调函数中的代码
 int nTemp;
 while ((nTemp = GetMessage(&msg, NULL, NULL, NULL)) && (-1 != nTemp) && (0 != nTemp))
 {
  if (WM_TIMER == msg.message)
  {
   cout << "I got a message" << endl;
   TranslateMessage(&msg);
   DispatchMessage(&msg);
  }
 }
 return 0;
}
void CALLBACK TimerProc(HWND hwnd, UINT Msg, UINT idEvent, DWORD dwTime)
{
 cout << "HelloWorld" << endl;
}

© 著作权归作者所有

共有 人打赏支持
colorlesswind
粉丝 1
博文 40
码字总数 9065
作品 0
广州
私信 提问
加载中

评论(1)

Chriesh
Chriesh
建议,进入回调第一件事是停止time,函数最后再开启
C++ 定时器的用法:SetTimer和Ontimer

SetTimer函数的用法 1)用WMTIMER来设置定时器 先请看SetTimer这个API函数的原型 UINTPTR SetTimer( HWND hWnd,//和定时器相关联的窗口 UINT_PTR nIDEvent,//一个非0的数字标志这个定时器 UI...

吃一堑消化不良
2015/11/17
0
0
【Android休眠】之PowerKey唤醒源实现

http://blog.csdn.net/u013686019/article/details/53677531

menghuanbeike
2018/04/23
0
0
PGRelief使用指南2014(Linux版)

1 配置分析选项 1.1指定编译器 -K 用法: pgr5 -K GNU/GCC3 a.cc [支持的编译器一览] 公司 编译器 renesas SH、H8、H8S、M16C、M16C80、M32C、M32R、7770、740、V850、78K0、78K0S、78K4、7...

myosnet
2015/02/03
210
0
c++日期和时间相关操作-(ctime)

  time.h(ctime)是c time library,定义了获取和操作日期和时间的函数。   1. 结构   [cpp] view plaincopy   typedef long time_t;   time_t是长整型,表示的是距(1970年,1月1...

微一
2013/01/04
546
2
Cocos2d-X 2.0嵌入MFC的子窗体的方法(1.0姐妹篇)

红孩儿的游戏编程之路 CSDN博客地址:http://blog.csdn.net/honghaier 红孩儿Cocos2d-X学习园地QQ群:249941957 加群写:Cocos2d-x 另本章为我的Cocos2d-x教程一书初稿。望各位看官多提建议!...

长平狐
2013/03/19
96
0

没有更多内容

加载失败,请刷新页面

加载更多

安卓constraintLayout中app:srcCompat设置的图片显示不出来

使用 app:srcCompat 的时候 引入的图片显示不出来的解决方案 首先查看的你的Activity 继承的是那个Activity 如果是继承AppcompatActivity 使用 ImageView的 app:srcCompat 是没有问题的 如果...

雨焰
42分钟前
1
0
MySQL mysqldump数据导出详解

MySQL mysqldump数据导出详解 2016-04-07 11:14 by pursuer.chen, 114348 阅读, 0 评论, 收藏, 编辑 介绍 在日常维护工作当中经常会需要对数据进行导出操作,而mysqldump是导出数据过程中使用...

linjin200
42分钟前
0
0
Lucene 检索时的步骤

用户输入查询语句:lucene AND learned NOT hadoop 搜索主要分为以下几步 第一步、对查询语句进行词法分析,语法分析,及语言处理 词法分析主要用来识别单词和关键字 语法分析主要是根据查询...

kdy1994
42分钟前
2
0
Gradle Implementation vs API configuration

注: 可以把 Implementation理解为java类的private, 使用Implementation则外部依赖本库的代码引用不到本库Implementation的代码, 也就是降低依赖树的层级, 这样就可以避免外部代码编译时候, 导...

SuShine
46分钟前
2
0
pdf安卓手机适配以及ie的兼容 以及隐藏掉下载打印按钮的方式

这是我目前遇到pdf方面最多的问题。 在百度上搜了很多答案,结果都是建议使用插件。而目前百度能搜的插件基本上都是有缺陷的。自己测试了很多插件。最后使用了pdf.js这个插件。这个插件目前完...

流年那么伤
52分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部