文档章节

C++中Timer的用法

colorlesswind
 colorlesswind
发布于 2015/06/05 11:29
字数 364
阅读 5469
收藏 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
extern "C"的用法解析

extern "C"的用法解析 http://blog.sina.com.cn/u/494a1ebc010004g5 C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和...

西昆仑
2011/12/23
0
0
C++基础教程之C/C++区别

C/C++基础教程之C/C++区别 这是C++教程得第一步,后续会持续更新哦!欢迎新手(具有C基础),老鸟可绕道,可指导。 C++标准输入和输出 C++标准输入和输出分别是cin和cout,用法非常简单 cin>>n...

这个人很懒什么都没留下
09/01
0
0
【Android休眠】之PowerKey唤醒源实现

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

menghuanbeike
04/23
0
0
Linux C++、Boost、ACE ......

Linux/UNIX、C++、Boost、ACE、Shell ...... Linux/UNIX C++高级培训---远程班 培养目标:Linux/UNIX C++高级软件工程师 专注Linux/UNIX服务器端的软件开发(后台开发),培养企业所需的专业...

athxy
2010/04/01
0
1

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
31分钟前
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
58分钟前
10
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部