Files
eUi/include/eui_singleton/timedTask.h
T
RCiRoot e3f7733316 V20260829-2.6.1
完成框架目录和模块重构;新增核心、单例、工具、加密及框架 SDK;统一任务、相机和 RPC 接口,并增加离线检测、相机标定、备份恢复、版本管理、崩溃守护和心跳监控功能。
2026-09-20 16:01:09 +08:00

66 lines
1.5 KiB
C++

#pragma once
#include "euiSingletonGlobal.h"
#include <QHash>
#include <QMutex>
#include <QObject>
#include <QString>
#include <QStringList>
#include <QWaitCondition>
#include <functional>
#include <memory>
class TimedTaskSchedulerThread;
class EUI_SERVICE_API TimedTask : public QObject {
Q_OBJECT
public:
using Callback = std::function<void()>;
explicit TimedTask(QObject* parent = nullptr);
~TimedTask() override;
bool addTask(const QString& taskId, int seconds, int minutes, int hours, Callback callback);
bool removeTask(const QString& taskId);
void clearTasks();
bool isActive() const;
QStringList taskIds() const;
signals:
void taskTriggered(const QString& taskId);
private slots:
void onTimeout();
private:
friend class TimedTaskSchedulerThread;
struct TaskEntry {
qint64 intervalMilliseconds = 0;
qint64 elapsedMilliseconds = 0;
quint64 generation = 0;
Callback callback;
};
static qint64 toSeconds(int seconds, int minutes, int hours);
static qint64 monotonicNowMs();
Q_DISABLE_COPY(TimedTask)
// 回调在专用调度线程执行,不得直接访问 QWidget;需要时请投递到目标线程。
std::unique_ptr<TimedTaskSchedulerThread> schedulerThread_;
QHash<QString, TaskEntry> tasks_;
mutable QMutex mutex;
QWaitCondition callbackFinished_;
QHash<QString, int> runningCallbacks_;
quint64 nextGeneration_ = 0;
qint64 lastTickMs_ = 0;
bool shuttingDown_ = false;
};
EUI_SERVICE_API TimedTask& appTimedTask();