文档章节

C++中Timer的用法

colorlesswind
 colorlesswind
发布于 2015/06/05 11:29
字数 364
阅读 5601
收藏 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)用WM_TIMER来设置定时器 先请看SetTimer这个API函数的原型 当在MFC的工程中如下: 用法如下: 参数: 1:计时器的名称; 1000:时间间隔,单位是毫秒; NULL:使用onT...

吃一堑消化不良
2015/11/17
5.3K
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
228
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
568
2
VM技术(二)从CHIP8入手CPU的模拟(一)

CHIP8的话网上已经有许多的模拟器的解说了,这里我们就给出CPU的模拟过程 CHIP8代码 CHIP8 CPU https://gitee.com/Luciferearth/EasyVGM/blob/master/modules/CHIP8/显示器 https://gitee.co...

Pulsar-V
07/31
17
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
693
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
39
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
25
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
74
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
73
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部