C++ 定時器任務類實現


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM