C++ 定时器任务类实现
#ifndef __TIMERTASK_H_
#define __TIMERTASK_H_ /* 定时器任务基类 */ #include "asr_taskinterface.h"
#include "comontype.h" class BaseTimerTask
{
public:
BaseTimerTask():m_uiTvSec(),m_uiTvUsec(){}
virtual ~BaseTimerTask(){}
public:
//设置定时器间隔
void setTimer(UINT uiTvSec,UINT uiTvUsec = ); //启动定时器
void startTimer(UINT uiTvSec,UINT uiTvUsec = ); //周期性任务
virtual void intervalTask() = ; 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 = ;
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(, NULL, NULL, NULL, &stTimeval);
//执行任务
intervalTask();
} while (( == infds) || (infds < && 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;
}
C++ 定时器任务类实现的更多相关文章
- Python 3.X 实现定时器 Timer,制作抽象的Timer定时器基类
Python 在不依赖第三方库的前提下,对于定时器的实现并不是很完美,但是这不意味着我们无法实现. 阅读了网上的一些资料,得出一些结论,顺手写了一个基类的定时器(Python3) BaseTimer: ...
- 基于ACE的定时器模板类
ACETimerClockGenerator.h ClockGeneratorIF.h 在类中定义一个结构体,在结构体中定义一个函数. 在结构体中定义一个函数,这样做有什么好呢? TimerHandl ...
- 定时器timer类
timer类 Timer(定时器)是Thread的派生类,用于在指定时间后调用一个方法. 构造方法: Timer(interval, function, args=[], kwargs={}) in ...
- java Timer定时器管理类
1.java timer类,定时器类.启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定 ...
- 线程中的定时器Timer类
Timer 定时器 几分钟之后执行一个任务. 创建了一个定时器相当于开启了一条线程,TimerTask相当于一个线程的任务.内部使用wait/notify机制来实现的. 用法非常的简单 就足以里面的 ...
- 一个JS定时器类
学习js,因为函数和定时器直接的关系是非绑定的.我不能说我开启一个定时,然后拿一个变量去记录这个setInterval的返回值,这样很麻烦. 本着面向对象的思想,利用业余时间(周末在家里)写了一个类, ...
- Linux下的定时器类实现(select定时+线程)
更好的计时器类实现:LINUX RTC机制实现计时器类(原创) 很多时候需要在LINUX下用到定时器,但像setitimer()和alarm()这样的定时器有时会和sleep()函数发生冲突,这样就给 ...
- VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)
前面一节鸡啄米讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考虑到,提起时间的话就不能不说定时器,所以就把它放到CTime和CTimeSpan之后 ...
- VS2010-MFC(MFC常用类:定时器Timer)
转自:http://www.jizhuomi.com/software/232.html 前面一节讲了CTime类和CTimeSpan类的使用,本节继续讲与时间有关的定时器.定时器并不是一个类,主要考 ...
随机推荐
- 深入理解Linux内核-定时测量
定时测量:由基于固定频率振荡器和计数器的几个硬件电路完成的. 记时体系概貌: 内核中与时间相关的任务: 硬件设备: 实时时钟(RTC):1.Real Time Clock ,独立于CPU和所有芯片,每 ...
- html5+css3 权威指南阅读笔记(三)---表单及其它新增和改良元素
一.新增元素及属性 1.表单内元素的form属性. html5: <form id="testForm"> <input type=text> </f ...
- Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免?
如题 Unix/Linux系统中僵尸进程是如何产生的?有什么危害?如何避免? 一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结 ...
- yum rpm 命令一运行就卡住 只有kill 掉
由于rpm的数据库出现异常导至直接卡死,造成这种异常是因为之前不正常的安装或查询. 解决方法: # rm -f /var/lib/rpm/__db.00* #删除rpm数据文件 # rpm --reb ...
- 阿里云流计算BLINK
https://help.aliyun.com/product/45029.html?spm=a2c4g.11186623.3.1.sSHCfr https://yq.aliyun.com/tags/ ...
- Linux设备驱动开发详解
Linux设备驱动开发详解 http://download.csdn.net/detail/wuyouzi067/9581380
- ubuntu 16.04 root 初始密码设置
()默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输命令 sudo passwd,然后输入当前用户的密码,enter ()终端会提示我们输入新的密码并确认,此时的密码就是 ...
- DIOCP开源项目-DIOCP3 大文件的传输DEMO<断点续传>
首先该DEMO在StreamCoder上面做的改动,期间导致StreamCoderDEMO经常出现问题,导致大家运行的时候,频频出现问题,表示道歉. 以下是测试的结果,从服务器下载传输了一个3G左右的 ...
- Spark SQL inferSchema实现原理探微(Python)【转】
使用Spark SQL的基础是“注册”(Register)若干表,表的一个重要组成部分就是模式,Spark SQL提供两种选项供用户选择: (1)applySchema applySche ...
- EL表达式取值中文再发送请求时会乱码
问题描述: 在网站底部进行评论,点击提交按钮时,后台tomcat报错,通过火狐浏览器的firebug看到发送的POST请求体中,有一个title参数是乱码, 导致该字段超长违反了数据库字段的长度约束: ...