码迷,mamicode.com
首页 > 编程语言 > 详细

C++中Timer的用法

时间:2015-06-05 14:08:14      阅读:680      评论:0      收藏:0      [点我收藏+]

标签:

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;
}

C++中Timer的用法

标签:

原文地址:http://my.oschina.net/u/2314763/blog/425232

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!