XNSim/XNCore/XNThread.h

197 lines
4.6 KiB
C
Raw Normal View History

2025-04-28 12:25:20 +08:00
/**
* @file XNThread.h
* @author jinchao
* @brief 线
* @version 1.0
* @date 2024-11-07
*
* @copyright Copyright (c) 2024 XN
*
*/
#pragma once
2025-05-20 15:39:40 +08:00
#include "XNObject.h"
2025-04-28 12:25:20 +08:00
2025-05-20 15:39:40 +08:00
struct XNThreadPrivate;
2025-04-28 12:25:20 +08:00
/**
* @brief 线
* @details
*/
2025-05-20 15:39:40 +08:00
class XNCORE_EXPORT XNThread : public XNObject
2025-04-28 12:25:20 +08:00
{
2025-05-20 15:39:40 +08:00
XN_METATYPE(XNThread, XNObject)
XN_DECLARE_PRIVATE(XNThread)
2025-04-28 12:25:20 +08:00
public:
2025-05-20 15:39:40 +08:00
XNThread() = delete;
2025-04-28 12:25:20 +08:00
/**
* @brief
*/
virtual ~XNThread();
2025-05-20 15:39:40 +08:00
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);
2025-04-28 12:25:20 +08:00
/**
* @brief 线
* @return true:
* @return false:
*/
bool Initialize();
/**
* @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 线
* @param simTime: timespec结构体类型线
* @details 使线
*/
2025-05-20 15:39:40 +08:00
void SetStartTime(const timespec &simTime);
2025-04-28 12:25:20 +08:00
/**
* @brief 线
* @details 线
*/
void Join();
/**
* @brief 线
*/
void Detach();
/**
* @brief 线ID
* @return const quint32&: 线ID
*/
2025-05-20 15:39:40 +08:00
const uint32_t &GetThreadID();
2025-04-28 12:25:20 +08:00
/**
* @brief 线ID
* @param threadID: 线ID
*/
2025-05-20 15:39:40 +08:00
void SetThreadID(const uint32_t &threadID);
2025-04-28 12:25:20 +08:00
/**
* @brief
* @return RunStatus:
*/
RunStatus GetRunStatus();
/**
2025-05-20 15:39:40 +08:00
* @brief 线
* @return const double&:线
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
const double &GetRunFrequecy();
2025-04-28 12:25:20 +08:00
/**
2025-05-20 15:39:40 +08:00
* @brief 线
* @param eRunFrequecy: double类型线
2025-04-28 12:25:20 +08:00
*/
2025-05-20 15:39:40 +08:00
void SetRunFrequecy(const double &dRunFrequecy);
2025-04-28 12:25:20 +08:00
/**
* @brief 线
* @return const UINT32&:09999
*/
2025-05-20 15:39:40 +08:00
const uint32_t &GetRunPriority();
2025-04-28 12:25:20 +08:00
/**
* @brief 线
* @param uRunPriority: UINT32类型09999
*/
2025-05-20 15:39:40 +08:00
void SetRunPriority(const uint32_t &uRunPriority);
2025-04-28 12:25:20 +08:00
/**
* @brief 线CPU亲和性掩码
* @return const UINT32&: CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
*/
2025-05-20 15:39:40 +08:00
const uint32_t &GetCPUAffinity();
2025-04-28 12:25:20 +08:00
/**
* @brief 线CPU亲和性掩码
* @param uCPUAffinity: UINT32类型CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
*/
2025-05-20 15:39:40 +08:00
void SetCPUAffinity(const uint32_t &uCPUAffinity);
2025-04-28 12:25:20 +08:00
/**
* @brief 线
* @param fun:XNCallBack函数包装器类型
* @param freq:FreqLevel类型
* @param pos:UINT32类型
* @param priorty:UINT32类型990
* @details 线
*/
2025-05-20 15:39:40 +08:00
void AddFunction(XNCallBack fun, FreqLevel freq, uint32_t pos, uint32_t priorty);
2025-04-28 12:25:20 +08:00
private:
2025-05-20 15:39:40 +08:00
/**
* @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);
2025-04-28 12:25:20 +08:00
/**
* @brief 线CPU亲和性设置
* @return true: 线CPU亲和性成功
* @return false: 线CPU亲和性失败
*/
bool OnSetCPUAffinity();
/**
* @brief 线
* @param args: 线
* @return void*: 线
*/
static void *ThreadFunction(void *args);
2025-05-20 15:39:40 +08:00
// /**
// * @brief 初始化周期性函数表
// */
//void InitialFunPool();
};
XNCLASS_PTR_DECLARE(XNThread)