完成框架目录和模块重构;新增核心、单例、工具、加密及框架 SDK;统一任务、相机和 RPC 接口,并增加离线检测、相机标定、备份恢复、版本管理、崩溃守护和心跳监控功能。
66 lines
1.5 KiB
C++
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();
|
|
|