XNSim/XNMonitor/ModelStatusWidget/ModelInfoUpdateThread.h
2025-04-28 12:25:20 +08:00

99 lines
1.8 KiB
C++
Executable File

/**
* @file ModelInfoUpdateThread.h
* @author jinchao
* @brief 模型信息更新线程类
* @version 1.0
* @date 2025-03-10
*
* @copyright Copyright (c) 2025 COMAC
*
*/
#pragma once
#include <QThread>
#include <QMutex>
#include <QMap>
#include <memory>
#include "../TypeDefine.h"
#include "../../XNCore/XNIDL/XNSimStatusPubSubTypes.hpp"
/**
* @brief 模型信息更新线程类
*/
class ModelInfoUpdateThread : public QThread
{
Q_OBJECT
public:
/**
* @brief 构造函数
* @param parent 父对象
*/
explicit ModelInfoUpdateThread(QObject *parent = nullptr) : QThread(parent) {}
/**
* @brief 析构函数
*/
virtual ~ModelInfoUpdateThread();
signals:
/**
* @brief 更新模型信息信号
* @param threadData 线程数据
*/
void updateModelInfo(const XNRuntimeData threadData);
public slots:
/**
* @brief 改变睡眠时间槽函数
* @param newSleepTime 新的睡眠时间
*/
void onChangeSleepTime(const unsigned int newSleepTime);
/**
* @brief 线程控制槽函数
* @param isRunning 是否运行
*/
void onThreadController(const bool &isRunning);
/**
* @brief 线程退出槽函数
*/
void onThreadQuit() { m_Quit = true; }
public:
/**
* @brief 初始化
*/
void Initialize();
protected:
/**
* @brief 运行
*/
void run() override;
private:
/**
* @brief 模型状态监听
* @param status 模型状态
*/
void ModelStatusListener(const XNSim::XNSimStatus::XNModelStatus &status);
private:
/**
* @brief 睡眠时间
*/
unsigned int m_SleepTime = 1000;
/**
* @brief 是否活跃
*/
bool m_Active = false;
/**
* @brief 是否退出
*/
bool m_Quit = false;
/**
* @brief 互斥锁
*/
QMutex m_Mutex;
/**
* @brief 模型状态
*/
QMap<quint32, XNSim::XNSimStatus::XNModelStatus> m_ModelStatus;
};