Windows定时器-timeSetEvent

 

接口:

MMRESULT timeSetEvent(  
  UINT uDelay,         // 以毫秒指定事件的周期  
  UINT uResolution,    // 以毫秒指定延时的精度,缺省值为1ms  
  LPTIMECALLBACK lpTimeProc, // 指向回调函数的指针  
  WORD dwUser,         // 用户定义的回调数据,传递给回调函数  
  UINT fuEvent         // 定时器事件类型(TIME_ONESHOT:只触发一次)(TIME_PERIODIC:每隔uDelay毫秒,触发多次)
);

 

Demo

// ConsoleApplication1.cpp : windows定时器
//

#include <iostream>
using namespace std;

#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib, "Winmm.lib")


void CALLBACK myTimerCB(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
    cout << "触发了: " << uTimerID << endl;
}


int main()
{
    // windows 定时器
    
    /**timeSetEvent
    * 
    MMRESULT timeSetEvent(  
      UINT uDelay,         // 以毫秒指定事件的周期  
      UINT uResolution,    // 以毫秒指定延时的精度,缺省值为1ms  
      LPTIMECALLBACK lpTimeProc, // 指向回调函数的指针  
      WORD dwUser,         // 用户定义的回调数据,传递给回调函数  
      UINT fuEvent         // 定时器事件类型(TIME_ONESHOT:只触发一次)(TIME_PERIODIC:每隔uDelay毫秒,触发多次)
    );
    */

    UINT g_timer_id = 0;

    bool run_timer = true;
    while (run_timer)
    {
        cout << "1:开启定时器;0:关闭定时器" << endl;
        
        int index;
        cin >> index;
        switch (index)
        {
        case 0: 
        {
            if (g_timer_id != 0) { timeKillEvent(g_timer_id); }
            run_timer = false;
        }break;
        case 1: 
        {
            if (g_timer_id != 0) { timeKillEvent(g_timer_id); }
            g_timer_id = timeSetEvent(50, 1, myTimerCB, NULL, TIME_PERIODIC);
        }break;
        }
    }
}

 

posted @ 2024-07-10 13:57  十一的杂文录  阅读(20)  评论(0编辑  收藏  举报