Qt定时任务

用法:
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(); 

代码下载
https://download.csdn.net/download/wei090101/10629830

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,您可以使用`QFileSystemWatcher`类来监视文件夹的变化,并使用`QTimer`类来实现定时任务。具体实现步骤如下: 1. 在Qt的项目文件中添加以下代码以使用`QFileSystemWatcher`类: ```cpp #include <QFileSystemWatcher> QFileSystemWatcher *watcher = new QFileSystemWatcher(this); watcher->addPath("/path/to/folder"); // 添加需要监视的文件夹路径 connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(folderChanged(QString))); ``` 2. 实现槽函数`folderChanged`以响应文件夹变化事件: ```cpp void MyClass::folderChanged(const QString &path) { // 处理文件夹变化事件 } ``` 3. 在定时任务中启动`QTimer`并启动事件循环: ```cpp QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(checkFolder())); timer->start(3600000); // 每小时执行一次 QCoreApplication::exec(); ``` 4. 实现槽函数`checkFolder`以检查文件夹数据更新: ```cpp void MyClass::checkFolder() { QString folder_path = "/path/to/folder"; // 文件夹路径 QFileInfo folder_info(folder_path); QDateTime last_update_time = folder_info.lastModified(); // 获取最近更新时间 QDateTime current_time = QDateTime::currentDateTime(); // 获取当前时间 qint64 time_diff = current_time.toMSecsSinceEpoch() - last_update_time.toMSecsSinceEpoch(); // 计算时间差 if (time_diff < 3600000) // 判断时间是否超过1小时 { qDebug() << "文件夹数据已更新"; } else { qDebug() << "文件夹数据未更新"; } } ``` 这样,每当定时任务运行时,就会执行`checkFolder()`函数,判断文件夹数据是否更新。当文件夹发生变化时,`QFileSystemWatcher`会发出`directoryChanged`信号,调用`folderChanged`槽函数进行处理。 请注意,这只是一个基本的示例,您需要根据实际需求调整代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值