用法:
1、实例化任务管理manager
2、继承AbstractScheduledTask,重写doTask()方法,并实例化对象,设置任务时间。
3、manager添加task对象
4、启动任务
5、多线程处理任务
ScheduledTaskManager.h
#include "AbstractScheduledTask.h"
using namespace std;
class ScheduledTaskManager : public QObject
{
Q_OBJECT
public:
explicit ScheduledTaskManager(QObject *parent = nullptr);
~ScheduledTaskManager();
void addTask(AbstractScheduledTask *task);
void removeTask(int index);
void startTask();
void stopTask();
signals:
private slots:
void slot_Timeout();
private:
bool isDoTask;
QTimer *mTimer;
vector<AbstractScheduledTask*> mTaskList;
};
AbstractScheduledTask.h
#include <QObject>
#include <QDateTime>
#include <QTime>
#include <QTimer>
#include <QThread>
#include <QDebug>
class AbstractScheduledTask : public QObject
{
Q_OBJECT
public:
explicit AbstractScheduledTask(QObject *parent = nullptr);
~AbstractScheduledTask();
void initTask();
AbstractScheduledTask(const AbstractScheduledTask &other);
AbstractScheduledTask & operator =(const AbstractScheduledTask &other);
void setScheduledTimes(QTime time);
QTime getScheduledTimes();
protected slots:
virtual void doTask() = 0;
void slot_doTask();
signals:
void notifyDoTask();
public slots:
private:
QTime mTime;
QThread *workThread;
};
ExampleTask.h
class ExampleTask : public AbstractScheduledTask
{
public:
explicit ExampleTask(QObject *parent = nullptr);
protected:
virtual void doTask();
};
测试
mScheduledTaskManager = new ScheduledTaskManager(this);
ExampleTask *task = new ExampleTask();
task->setScheduledTimes(QTime::currentTime().addSecs(6));
mScheduledTaskManager->addTask(task);
mScheduledTaskManager->startTask();