前言
实现一个周期性调用类。通过TaskTimer构造函数设置周期,通过setTimerFun传入要调用函数和参数,start启动,stop停止。比如要每30秒发送一个心跳包可以把发送包的函数传入定时器,定时器会创建一个线程周期性发送这个包。
实现
TaskTimer主要有开始、停止、设置调用函数与参数,三个方法。
- 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
复制代码- 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函数实现调用。
[code] 1 #include 2 #include 3 #include "TaskTimer.h" 4 5 static void func(void*param){ 6 int * pi = (int*)param; 7 std::cout |