zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    ansible——playbook conditions条件判断
    ansible——playbook lookups从插件加载变量
    ansible——playbook循环
    lombok注解
    集合与集合取笛卡尔积
    List排列组合
    synchronized初识
    java IO与NIO
    文件I/O和标准I/O
    双数据源配置
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/9410616.html
Copyright © 2011-2022 走看看