197 lines
4.6 KiB
C++
Executable File
197 lines
4.6 KiB
C++
Executable File
/**
|
||
* @file XNThread.h
|
||
* @author jinchao
|
||
* @brief 调度线程类头文件
|
||
* @version 1.0
|
||
* @date 2024-11-07
|
||
*
|
||
* @copyright Copyright (c) 2024 XN
|
||
*
|
||
*/
|
||
#pragma once
|
||
#include "XNObject.h"
|
||
|
||
struct XNThreadPrivate;
|
||
|
||
/**
|
||
* @brief 调度线程类
|
||
* @details 调度所有模型提交的周期性执行函数
|
||
*/
|
||
class XNCORE_EXPORT XNThread : public XNObject
|
||
{
|
||
XN_METATYPE(XNThread, XNObject)
|
||
XN_DECLARE_PRIVATE(XNThread)
|
||
|
||
public:
|
||
XNThread() = delete;
|
||
|
||
/**
|
||
* @brief 默认析构函数
|
||
*/
|
||
virtual ~XNThread();
|
||
|
||
explicit XNThread(std::string name = "", double freq = BASE_RUN_FREQ, uint32_t priority = 99,
|
||
uint32_t CPUAff = 0);
|
||
|
||
public:
|
||
/**
|
||
* @brief 获取框架对象
|
||
* @return 框架对象
|
||
*/
|
||
XNFrameworkPtr GetFramework();
|
||
|
||
/**
|
||
* @brief 设置框架对象
|
||
* @param framework 框架对象
|
||
*/
|
||
void SetFramework(XNFrameworkPtr framework);
|
||
|
||
/**
|
||
* @brief 线程初始化
|
||
* @return true: 初始化成功
|
||
* @return false: 初始化失败
|
||
*/
|
||
bool Initialize();
|
||
|
||
/**
|
||
* @brief 仿真控制
|
||
* @param objectId: 对象ID
|
||
* @param cmd: 仿真控制命令
|
||
*/
|
||
void SimControl(uint32_t objectId, SimControlCmd cmd);
|
||
|
||
/**
|
||
* @brief 设置线程运行的开始时间
|
||
* @param simTime: timespec结构体类型,用于线程纳秒睡眠计算的开始时间
|
||
* @details 通过设置统一的开始时间,使个线程能同步执行
|
||
*/
|
||
void SetStartTime(const timespec &simTime);
|
||
|
||
/**
|
||
* @brief 加入线程
|
||
* @details 等待线程结束
|
||
*/
|
||
void Join();
|
||
|
||
/**
|
||
* @brief 线程脱离
|
||
*/
|
||
void Detach();
|
||
|
||
/**
|
||
* @brief 获取线程ID
|
||
* @return const quint32&: 线程ID
|
||
*/
|
||
const uint32_t &GetThreadID();
|
||
|
||
/**
|
||
* @brief 设置线程ID
|
||
* @param threadID: 线程ID
|
||
*/
|
||
void SetThreadID(const uint32_t &threadID);
|
||
|
||
/**
|
||
* @brief 获取运行状态
|
||
* @return RunStatus: 运行状态枚举
|
||
*/
|
||
RunStatus GetRunStatus();
|
||
|
||
/**
|
||
* @brief 获取线程运行频率
|
||
* @return const double&:线程运行频率
|
||
*/
|
||
const double &GetRunFrequecy();
|
||
|
||
/**
|
||
* @brief 设置线程运行频率
|
||
* @param eRunFrequecy: double类型,线程运行频率
|
||
*/
|
||
void SetRunFrequecy(const double &dRunFrequecy);
|
||
|
||
/**
|
||
* @brief 获取线程运行优先级
|
||
* @return const UINT32&:运行优先级,0~99,99最高
|
||
*/
|
||
const uint32_t &GetRunPriority();
|
||
|
||
/**
|
||
* @brief 设置线程运行优先级
|
||
* @param uRunPriority: UINT32类型,运行优先级,0~99,99最高
|
||
*/
|
||
void SetRunPriority(const uint32_t &uRunPriority);
|
||
|
||
/**
|
||
* @brief 设置线程CPU亲和性掩码
|
||
* @return const UINT32&: CPU亲和性掩码,按位表示某CPU核是否使用,从低到高,0表示不使用,1表示使用。
|
||
* 例如:0x00000003表示使用0,1号CPU
|
||
*/
|
||
const uint32_t &GetCPUAffinity();
|
||
|
||
/**
|
||
* @brief 获取线程CPU亲和性掩码
|
||
* @param uCPUAffinity: UINT32类型,CPU亲和性掩码,按位表示某CPU核是否使用,从低到高,0表示不使用,1表示使用。
|
||
* 例如:0x00000003表示使用0,1号CPU
|
||
*/
|
||
void SetCPUAffinity(const uint32_t &uCPUAffinity);
|
||
|
||
/**
|
||
* @brief 向线程添加周期性函数
|
||
* @param fun:XNCallBack函数包装器类型,需要提交的函数的包装
|
||
* @param freq:FreqLevel类型,提交的函数运行频率组
|
||
* @param pos:UINT32类型,提交的函数运行节点号
|
||
* @param priorty:UINT32类型,提交的函数运行优先级,99~0,优先级数值越大,优先级越高
|
||
* @details 根据运行频率组和节点号向调度线程任务表中添加周期性函数
|
||
*/
|
||
void AddFunction(XNCallBack fun, FreqLevel freq, uint32_t pos, uint32_t priorty);
|
||
|
||
private:
|
||
/**
|
||
* @brief 控制线程开始
|
||
* @return true: 线程启动成功
|
||
* @return false: 线程启动失败
|
||
*/
|
||
void Start();
|
||
|
||
/**
|
||
* @brief 控制线程暂停
|
||
* @return true: 线程暂停成功
|
||
* @return false: 线程暂停失败
|
||
*/
|
||
void Pause();
|
||
|
||
/**
|
||
* @brief 控制线程继续
|
||
* @return true: 线程继续成功
|
||
* @return false: 线程继续失败
|
||
*/
|
||
void Continue();
|
||
|
||
/**
|
||
* @brief 控制线程停止
|
||
* @param force:bool类型,true = 强制停止,flase = 等待当前认为结束后停止
|
||
* @return true: 线程停止成功
|
||
* @return false: 线程停止失败
|
||
*/
|
||
void Stop(bool force = false);
|
||
|
||
/**
|
||
* @brief 执行线程CPU亲和性设置
|
||
* @return true: 设置线程CPU亲和性成功
|
||
* @return false: 设置线程CPU亲和性失败
|
||
*/
|
||
bool OnSetCPUAffinity();
|
||
|
||
/**
|
||
* @brief 线程主执行函数
|
||
* @param args: 线程执行函数输入参数指针
|
||
* @return void*: 线程执行函数返回值指针
|
||
*/
|
||
static void *ThreadFunction(void *args);
|
||
|
||
// /**
|
||
// * @brief 初始化周期性函数表
|
||
// */
|
||
//void InitialFunPool();
|
||
};
|
||
|
||
XNCLASS_PTR_DECLARE(XNThread) |