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