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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值