#ifndef __TIMERTASK_H_ #define __TIMERTASK_H_ /* 定時器任務基類 */ #include "asr_taskinterface.h" #include "comontype.h" class BaseTimerTask { public: BaseTimerTask():m_uiTvSec(0),m_uiTvUsec(0){} virtual ~BaseTimerTask(){} public: //設置定時器間隔 void setTimer(UINT uiTvSec,UINT uiTvUsec = 0); //啟動定時器 void startTimer(UINT uiTvSec,UINT uiTvUsec = 0); //周期性任務 virtual void intervalTask() = 0; private: UINT m_uiTvSec; //秒 UINT m_uiTvUsec; //微秒 }; #endif
#include "timertask.h" #include <sys/select.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> /******************************************************** BaseTimerTask *********************************************************/ /******************************************************** Func Name: setTimer Date Created: 2018-7-30 Description: 設置定時器 Input: uiTvSec:設置間隔多少秒 uiTvUsec:設置間隔多少微秒 Output: Return: Caution: *********************************************************/ void BaseTimerTask::setTimer(UINT uiTvSec,UINT uiTvUsec) { m_uiTvSec = uiTvSec; m_uiTvUsec = uiTvUsec; } /******************************************************** Func Name: setTimer Date Created: 2018-7-30 Description: 開啟定時器 Input: uiTvSec:設置間隔多少秒 uiTvUsec:設置間隔多少微秒 Output: Return: Caution: *********************************************************/ void BaseTimerTask::startTimer(UINT uiTvSec,UINT uiTvUsec) { int infds = 0; struct timeval stTimeval; m_uiTvSec = uiTvSec; m_uiTvUsec = uiTvUsec; do { stTimeval.tv_sec = (long)m_uiTvSec; stTimeval.tv_usec = (long)m_uiTvUsec; //select()每次返回后都會清空struct timeval參數 infds = select(0, NULL, NULL, NULL, &stTimeval); //執行任務 intervalTask(); } while ((0 == infds) || (infds < 0 && EINTR == errno)); }
#ifndef __TESTTIMER_H_ #define __TESTTIMER_H_ /* 測試定時器任務類 */ #include "timertask.h" class CPrintTimer:public BaseTimerTask { public: virtual void intervalTask(); }; #endif
#include <iostream> #include "testtimer.h" /******************************************************** CPrintTimer *********************************************************/ /******************************************************** Func Name: intervalTask Date Created: 2018-7-30 Description: 執行任務 Input: Output: Return: Caution: *********************************************************/ void CPrintTimer::intervalTask() { std::cout << "praise chaos" << std::endl; }
