找回密码
 立即注册
首页 业界区 业界 【C++】实现一个定时器

【C++】实现一个定时器

焦尔蕾 2026-2-12 04:50:02
前言

实现一个周期性调用类。通过TaskTimer构造函数设置周期,通过setTimerFun传入要调用函数和参数,start启动,stop停止。比如要每30秒发送一个心跳包可以把发送包的函数传入定时器,定时器会创建一个线程周期性发送这个包。
实现

TaskTimer主要有开始、停止、设置调用函数与参数,三个方法。

  • TaskTimer.h
  1.   1 #ifndef  _TASKTIMER_H  2 #define _TASKTIMER_H  3 //计时器 实现循环注册  4 #include   5 #include   6 #include   7 #include    8   9 //定时器调用的函数 10 typedef void(*timerFunCallBack)(void * param); 11  12 class  TaskTimer{ 13  14     public: 15         TaskTimer(unsigned long second); 16         ~TaskTimer(); 17  18         void start(); 19         void stop(); 20  21         void setTimerFun(timerFunCallBack fun,void* param); 22         static void * timer(void * context); 23  24     private: 25         //回调函数 26         timerFunCallBack m_timerFun; 27         //回调函数参数 28         void * m_funParam; 29         //间隔 30         unsigned long m_timeSecond; 31         bool m_isStop; 32         std::thread m_thread; 33 }; 34  35 #endif
复制代码

  • TaskTimer.cpp
  1. 1 #include "TaskTimer.h"  2 #include   3   4 TaskTimer::TaskTimer(unsigned long second):m_timeSecond(second),m_isStop(true){  5         m_timerFun = nullptr;  6         m_funParam = nullptr;  7                   8 }  9 TaskTimer:: ~TaskTimer(){ 10     stop(); 11 } 12  13 void TaskTimer::start(){ 14     //创建线程 15     m_isStop = false; 16     m_thread = std::thread(&TaskTimer::timer,(void*)this); 17     std::coutm_funParam); 55             } 56         }else{ 57                 usleep(1000*1000); 58                 continue; 59         } 60     } 61     return nullptr; 62 }
复制代码

  • main.cpp
main函数实现调用。
[code]  1 #include   2 #include   3 #include "TaskTimer.h"  4   5 static void func(void*param){  6         int * pi = (int*)param;  7         std::cout

相关推荐

7 天前

举报

喜欢鼓捣这些软件,现在用得少,谢谢分享!
昨天 01:00

举报

您需要登录后才可以回帖 登录 | 立即注册