#pragma once #include "XNObject/XNObject_p.h" namespace XNSim { /** * @brief 线程类私有结构体 */ struct XNThreadObjectPrivate : public XNObjectPrivate { /** * @brief 框架对象 */ XNFrameworkPtr _framework; /** * @brief 线程运行优先级 */ XN_UINT32 _uPriority = 0; /** * @brief 线程CPU亲和性掩码 * @details * 按位表示某CPU核是否使用,从低到高,0表示不使用,1表示使用。例如:0x00000003表示使用0,1号CPU */ XN_UINT32 _uAffinity = 0; /** * @brief 线程运行频率 */ XN_DOUBLE _setFreq = BASE_RUN_FREQ; /** * @brief 线程调度任务表 */ std::vector>> _funVec; #ifdef XN_WINDOWS /** * @brief 线程 */ XN_THREAD _thread; /** * @brief 线程控制锁 */ XN_MUTEX _mutex; /** * @brief 线程控制锁 */ XN_THREAD_MUTEX _mtx = std::unique_lock(_mutex); /** * @brief 线程控制条件变量 */ XN_THREAD_CV _cond; #endif #ifdef XN_LINUX /** * @brief pthread线程调度参数 */ XN_THREAD_SCHED_PARAM _param; /** * @brief pthread线程属性 */ XN_THREAD_ATTR _attr; /** * @brief pthread线程 */ XN_THREAD _thread; /** * @brief 线程控制锁 */ XN_THREAD_MUTEX _mtx = PTHREAD_MUTEX_INITIALIZER; /** * @brief 线程控制条件变量 */ XN_THREAD_CV _cond = PTHREAD_COND_INITIALIZER; #endif /** * @brief 线程睡眠时间控制 */ PERIOD_INFO _pinfo; /** * @brief 线程运行状态 */ RunStatus _eRunStatus = RunStatus::NotStart; /** * @brief 线程执行进度 */ XN_UINT32 _RunPosition = 0; /** * @brief 线程执行计数 */ XN_INT32 _count = 0; /** * @brief 线程执行时间统计 */ XN_TIMESPEC _lastRunTime; /** * @brief 线程运行状态主题写入器 */ XN_DDS::DataWriter *_writer; /** * @brief 线程ID */ XN_UINT32 _threadID = 0; }; } // namespace XNSim