XNSim/XNCore/XNTimeManager.h
2025-04-28 12:25:20 +08:00

134 lines
2.9 KiB
C++
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file XNTimeManager.h
* @author jinchao
* @brief 时间管理器类头文件
* @version 1.0
* @date 2024-11-10
*
* @copyright Copyright (c) 2024 XN
*
*/
#pragma once
#include "XNBaseFrameObject.h"
#include <QDateTime>
class XNTimeManagerPrivate;
/**
* @brief 时间管理器类
* @details 管理仿真系统运行时的时间,在仿真系统运行时同步步进时间信息,并产生系统运行事件
*/
class XNCORE_EXPORT XNTimeManager : public XNBaseFrameObject
{
Q_OBJECT
Q_DISABLE_COPY(XNTimeManager);
Q_DECLARE_PRIVATE(XNTimeManager);
public:
/**
* @brief 构造函数
* @param parent: 父对象
*/
explicit XNTimeManager(QObject *parent = nullptr);
/**
* @brief 析构函数
*/
virtual ~XNTimeManager();
protected:
/**
* @brief 构造函数
* @param dd: 私有数据成员
* @param parent: 父对象
*/
XNTimeManager(XNTimeManagerPrivate &dd, QObject *parent = nullptr);
public:
/**
* @brief 获取当前仿真时间
* @return QDateTime: 当前仿真时间
*/
QDateTime GetSimTime();
signals:
/**
* @brief 设置仿真开始时间信号
* @param simTime: timespec结构体类型用于线程纳秒睡眠计算的开始时间
* @details 通过设置统一的开始时间,使个线程能同步执行
*/
void SetStartTime(const timespec &simTime);
/**
* @brief 仿真控制信号
* @param objectId: 对象ID
* @param cmd: 仿真控制命令
*/
void SimControl(quint32 objectId, SimControlCmd cmd);
public slots:
/**
* @brief 设置仿真开始时间
* @param simTime: timespec类型仿真开始时间
*/
void OnSetStartTime(const timespec &simTime);
/**
* @brief 开始控制
* @details 控制时间管理器线程开始运行接口
*/
void OnStart();
/**
* @brief 停止控制
* @details 控制时间管理器线程停止运行接口
*/
void OnAbort();
/**
* @brief 暂停控制
* @details 控制时间管理器线程暂停运行接口
*/
void OnPause();
/**
* @brief 继续控制
* @details 控制时间管理器线程继续运行接口
*/
void OnContinue();
/**
* @brief 初始化时间管理器
* @return true: 初始化成功
* @return false: 初始化失败
* @details 时间管理器的初始化接口函数
*/
virtual void OnInitialize() override;
/**
* @brief 仿真运行前最后处理
* @note 时间管理器在开始执行前的准备工作
*/
virtual void OnPrepareForExecute() override;
/**
* @brief 仿真控制
* @param objectId: 对象ID
* @param cmd: 仿真控制命令
*/
void OnSimControl(quint32 objectId, SimControlCmd cmd);
public:
/**
* @brief 获取运行状态
* @return RunStatus: 枚举类,时间管理器线程运行状态
* @details 获取时间管理器线程运行状态接口
*/
RunStatus GetStatus();
private:
/**
* @brief 时间管理器线程单步执行函数
*/
void StepExecute();
};