XNSim/XNCore_Win/XNThreadObject/XNThreadObject.h

207 lines
5.1 KiB
C
Raw Normal View History

2025-07-19 12:44:06 +08:00
/**
* @file XNThreadObject.h
* @author jinchao
* @brief 线
* @version 1.0
* @date 2024-11-07
*
* @copyright Copyright (c) 2024 XN
*
*/
#pragma once
#include "XNObject/XNObject.h"
namespace XNSim {
struct XNThreadObjectPrivate;
/**
* @brief 线
* @details
*/
class XNCORE_EXPORT XNThreadObject : public XNObject {
XN_METATYPE(XNThreadObject, XNObject)
XN_DECLARE_PRIVATE(XNThreadObject)
public:
XNThreadObject() = delete;
/**
* @brief
*/
virtual ~XNThreadObject();
explicit XNThreadObject(XN_STRING name = "", XN_DOUBLE freq = BASE_RUN_FREQ,
XN_UINT32 priority = 99, XN_UINT32 CPUAff = 0);
public:
/**
* @brief
* @return
*/
XNFrameworkPtr GetFramework();
/**
* @brief
* @param framework
*/
void SetFramework(XNFrameworkPtr framework);
/**
* @brief 线
* @return true:
* @return false:
*/
XN_BOOL Initialize();
/**
* @brief 仿
* @param objectId: ID
* @param cmd: 仿
*/
void SimControl(XN_UINT32 objectId, SimControlCmd cmd);
/**
* @brief 线
* @param simTime: timespec结构体类型线
* @details 使线
*/
void SetStartTime(const XN_TIMESPEC &simTime);
/**
* @brief 线
* @details 线
*/
void Join();
/**
* @brief 线
*/
void Detach();
/**
* @brief 线ID
* @return const quint32&: 线ID
*/
const XN_UINT32 &GetThreadID();
/**
* @brief 线ID
* @param threadID: 线ID
*/
void SetThreadID(const XN_UINT32 &threadID);
/**
* @brief
* @return RunStatus:
*/
RunStatus GetRunStatus();
/**
* @brief 线
* @return const double&:线
*/
const XN_DOUBLE &GetRunFrequecy();
/**
* @brief 线
* @param eRunFrequecy: double类型线
*/
void SetRunFrequecy(const XN_DOUBLE &dRunFrequecy);
/**
* @brief 线
* @return const UINT32&:09999
*/
const XN_UINT32 &GetRunPriority();
/**
* @brief 线
* @param uRunPriority: UINT32类型09999
*/
void SetRunPriority(const XN_UINT32 &uRunPriority);
/**
* @brief 线CPU亲和性掩码
* @return const UINT32&:
* CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
*/
const XN_UINT32 &GetCPUAffinity();
/**
* @brief 线CPU亲和性掩码
* @param uCPUAffinity:
* UINT32类型CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
*/
void SetCPUAffinity(const XN_UINT32 &uCPUAffinity);
/**
* @brief 线
* @param fun:XNCallBack函数包装器类型
* @param freq:FreqLevel类型
* @param pos:UINT32类型
* @param
* priorty:UINT32类型990
* @details 线
*/
void AddFunction(XNCallBack fun, FreqLevel freq, XN_UINT32 pos,
XN_UINT32 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(XN_BOOL force = false);
/**
* @brief 线CPU亲和性设置
* @return true: 线CPU亲和性成功
* @return false: 线CPU亲和性失败
*/
XN_BOOL OnSetCPUAffinity();
#ifdef XN_WINDOWS
/**
* @brief 线
* @param args: 线
* @return void*: 线
*/
void ThreadFunction();
#endif
#ifdef XN_LINUX
/**
* @brief 线
* @param args: 线
* @return void*: 线
*/
static void *ThreadFunction(void *args);
#endif
};
XNCLASS_PTR_DECLARE(XNThreadObject)
} // namespace XNSim