/** * @file XNTimeManager.h * @author jinchao * @brief 时间管理器类头文件 * @version 1.0 * @date 2024-11-10 * * @copyright Copyright (c) 2024 XN * */ #pragma once #include "XNBaseFrameObject.h" #include struct XNTimeManagerPrivate; /** * @brief 时间管理器类 * @details 管理仿真系统运行时的时间,在仿真系统运行时同步步进时间信息,并产生系统运行事件 */ class XNCORE_EXPORT XNTimeManager : public XNBaseFrameObject { XN_METATYPE(XNTimeManager, XNBaseFrameObject) XN_DECLARE_PRIVATE(XNTimeManager) public: /** * @brief 构造函数 */ XNTimeManager(); /** * @brief 析构函数 */ virtual ~XNTimeManager(); protected: /** * @brief 构造函数 * @param p: 私有数据成员 */ XNTimeManager(PrivateType *p); public: /** * @brief 获取当前仿真时间 * @return std::chrono::system_clock::time_point: 当前仿真时间 */ XNTimePoint GetSimTime(); /** * @brief 设置仿真开始时间 * @param simTime: timespec类型,仿真开始时间 */ void SetStartTime(const timespec &simTime); /** * @brief 开始控制 * @details 控制时间管理器线程开始运行接口 */ void Start(); /** * @brief 停止控制 * @details 控制时间管理器线程停止运行接口 */ void Abort(); /** * @brief 暂停控制 * @details 控制时间管理器线程暂停运行接口 */ void Pause(); /** * @brief 继续控制 * @details 控制时间管理器线程继续运行接口 */ void Continue(); /** * @brief 初始化时间管理器 * @return true: 初始化成功 * @return false: 初始化失败 * @details 时间管理器的初始化接口函数 */ virtual bool Initialize() override; /** * @brief 仿真运行前最后处理 * @note 时间管理器在开始执行前的准备工作 */ virtual bool PrepareForExecute() override; /** * @brief 仿真控制 * @param objectId: 对象ID * @param cmd: 仿真控制命令 */ void SimControl(uint32_t objectId, SimControlCmd cmd); /** * @brief 获取运行状态 * @return RunStatus: 枚举类,时间管理器线程运行状态 * @details 获取时间管理器线程运行状态接口 */ RunStatus GetStatus(); private: /** * @brief 时间管理器线程单步执行函数 */ void StepExecute(); };