C++中Timer的用法

jopen 9年前

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