145 lines
3.6 KiB
C++
Executable File
145 lines
3.6 KiB
C++
Executable File
#pragma once
|
|
#include <QThread>
|
|
#include <QString>
|
|
#include <QMap>
|
|
#include <QMutex>
|
|
#include "../TopicMonitorFactory/TopicMonitor.h"
|
|
#include "../TopicManager/TopicManager.h"
|
|
#include "../TypeDefine.h"
|
|
|
|
class DataMonitorThread : public QThread
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit DataMonitorThread(QObject *parent = nullptr);
|
|
~DataMonitorThread();
|
|
|
|
signals:
|
|
void updateMonitoringData(const QString &varName, const QString &value);
|
|
void sendDebugMessage(int type, const QString &message); // 发送调试信息的信号声明
|
|
public slots:
|
|
/**
|
|
* @brief 设置线程休眠时间
|
|
* @param newSleepTime 新的休眠时间(毫秒)
|
|
*/
|
|
void onChangeSleepTime(const unsigned int newSleepTime);
|
|
|
|
/**
|
|
* @brief 控制线程运行状态
|
|
* @param isRunning true:运行 false:停止
|
|
*/
|
|
void onThreadController(const bool &isRunning);
|
|
|
|
/**
|
|
* @brief 保存模型定义
|
|
* @param modelDefinition 模型定义
|
|
*/
|
|
void onSaveModelDefinition(const QSharedPointer<ModelDefinition> &modelDefinition);
|
|
|
|
/**
|
|
* @brief 开始监控指定变量
|
|
* @param varName 变量名
|
|
*/
|
|
void onStartMonitoring(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
|
|
/**
|
|
* @brief 停止监控指定变量
|
|
* @param varName 变量名
|
|
*/
|
|
void onStopMonitoring(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
|
|
/**
|
|
* @brief 暂停监控指定变量
|
|
* @param varName 变量名
|
|
*/
|
|
void onPauseMonitoring(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
|
|
/**
|
|
* @brief 恢复监控指定变量
|
|
* @param varName 变量名
|
|
*/
|
|
void onResumeMonitoring(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
|
|
/**
|
|
* @brief 注入一次性数据
|
|
* @param varName 变量名
|
|
* @param value 注入的值
|
|
*/
|
|
void onInjectOnceData(const QString &modelName, const QString &topicName,
|
|
const QString &varName, const double &value);
|
|
|
|
/**
|
|
* @brief 持续注入数据
|
|
* @param varName 变量名
|
|
* @param value 注入的值
|
|
*/
|
|
void onInjectContinuousData(const QString &modelName, const QString &topicName,
|
|
const QString &varName, const double &value);
|
|
|
|
/**
|
|
* @brief 停止持续注入数据
|
|
* @param varName 变量名
|
|
*/
|
|
void onStopInjectContinuousData(const QString &modelName, const QString &topicName,
|
|
const QString &varName);
|
|
|
|
/**
|
|
* @brief 退出线程
|
|
*/
|
|
void onThreadQuit() { m_Quit = true; }
|
|
|
|
protected:
|
|
/**
|
|
* @brief 线程运行函数
|
|
*/
|
|
void run() override;
|
|
|
|
private:
|
|
/**
|
|
* @brief 启动主题监控
|
|
* @param modelName 模型名
|
|
* @param topicName 主题名
|
|
* @return 是否启动成功
|
|
*/
|
|
bool StartTopicMonitor(const QString &modelName, const QString &topicName);
|
|
|
|
private:
|
|
/**
|
|
* @brief 模型名到模型定义的映射
|
|
*/
|
|
QMap<QString, QSharedPointer<StructDefinition>> m_StructDefinitionList;
|
|
/**
|
|
* @brief 变量名到监控状态的映射
|
|
*/
|
|
QMap<QString, QMap<QString, unsigned int>> m_VarNameMap;
|
|
/**
|
|
* @brief 变量名到注入值的映射
|
|
*/
|
|
QMap<QString, QMap<QString, double>> m_InjectValueMap;
|
|
/**
|
|
* @brief 线程休眠时间(毫秒)
|
|
*/
|
|
unsigned int m_SleepTime = 1000;
|
|
/**
|
|
* @brief 线程活动状态
|
|
*/
|
|
bool m_Active = false;
|
|
/**
|
|
* @brief 线程退出标志
|
|
*/
|
|
bool m_Quit = false;
|
|
/**
|
|
* @brief 互斥锁
|
|
*/
|
|
QMutex m_Mutex;
|
|
/**
|
|
* @brief 模型名到主题监控器的映射
|
|
*/
|
|
QMap<QString, QSharedPointer<TopicMonitor>> m_TopicMonitorMap;
|
|
};
|