| jybox |
2012-05-22 21:42 |
自己写了个一个任务队列类
如题,我的需求是这样的,我需要为我的vps,神马终端写一个自动化的管理工具,有很多任务需要定时运行,但是要求不尽相同 有的要求每隔一段时间运行,有的要求固定在每天的某个时刻运行,有的要求隔几天在某个时刻运行 于是写了这么一个类,可以利用Qt的信号槽,按照要求进行调度
ps.其实这东西直接用linux的cron会更方便点?
源文件有两个,一个头文件,一个实现文件: https://github.com/jybox/MyWorks/blob/master/WhatBackuper/TaskQueue.h https://github.com/jybox/MyWorks/blob/master/WhatBackuper/TaskQueue.cpp
class Task:public QObject { Q_OBJECT //Task类表示一个任务 public: bool isPerOrAt;//是隔一段时间运行,还是定时运行 int perSec;//如果是隔一段时间运行,隔多少秒 QTime atTime;//如果是定时运行,在什么时刻 int atTimePerDays;//如果是定时运行,隔多少天 unsigned int lastRunTime;//上一次运行这个任务的时间 QTimer timer;//定时器 QString name;//任务的名字 QObject *receiver;//接收信号的对象 QString slot;//接收信号的槽 public slots: void timeout();//链接到timer的timeout信号 };
class TaskQueue:public QObject { //这个就是任务队列类了 Q_OBJECT public: explicit TaskQueue(); void addPerSec(QString name,int sec,QObject *receiver,QString slot);//添加一个隔一段时间运行的任务 void addAtTime(QString name,QTime time,int perDays,QObject *receiver,QString slot);//添加一个定时运行的任务 bool remove(QString name);//删除任务
void setUpTask(QString name,QObject *receiver,QString slot);
QMap<QString,Task*> taskList;//用来保存任务信息 };
实现文件不贴了... 用法: 比如我需要每隔30秒,调用core对象的timeout槽,可以这么写: TaskQueue queue; queue.addPerSec("任务名",30,core,SLOT(timeout)); 这里的任务名只是起到一个标识的作用,可以在删除任务时用到
比如需要每天9点,调用core对象的timeout槽,可以这么写: queue.addAtTime("任务名",QTime(9,0,0),1,core,SLOT(timeout)); 第三参数1,表示每天运行
如果需要每隔三天的9点,调用core对象的timeout槽,可以这么写: queue.addAtTime("任务名",QTime(9,0,0),3,core,SLOT(timeout));
|
|