XNSim/XNCore/XNThread.h

196 lines
4.7 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
#include <QObject>
#include <QThread>
#include "XNCore_global.h"
class XNThreadPrivate;
/**
* @brief 线
* @details
*/
class XNCORE_EXPORT XNThread : public QObject
{
Q_OBJECT
Q_DISABLE_COPY(XNThread)
Q_DECLARE_PRIVATE(XNThread)
public:
explicit XNThread(QObject *parent = nullptr);
XNThread(QObject *parent = nullptr, QString name = "", FreqLevel freq = FreqLevel::BaseFreq,
quint32 priority = 99, quint32 CPUAff = 0, double RunInter = BASE_RUN_INTER);
protected:
XNThreadPrivate *d_ptr;
public:
/**
* @brief
*/
virtual ~XNThread();
/**
* @brief 线
* @return true:
* @return false:
*/
bool Initialize();
public slots:
/**
* @brief 仿
* @param objectId: ID
* @param cmd: 仿
*/
void OnSimControl(quint32 objectId, SimControlCmd cmd);
/**
* @brief 线
* @param simTime: timespec结构体类型线
* @details 使线
*/
void OnSetStartTime(const timespec &simTime);
/**
* @brief 线
* @param dRunInter: double类型线
*/
void SetRunInter(const double &dRunInter);
/**
* @brief 线
* @details 线
*/
void Join();
/**
* @brief 线
*/
void Detach();
public:
/**
* @brief 线ID
* @return const quint32&: 线ID
*/
const quint32 &GetThreadID();
/**
* @brief 线ID
* @param threadID: 线ID
*/
void SetThreadID(const quint32 &threadID);
/**
* @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
* @return RunStatus:
*/
RunStatus GetRunStatus();
/**
* @brief 线
* @return const FreqLevel&:线
*/
const FreqLevel &GetRunFrequecy();
/**
* @brief 线
* @param eRunFrequecy: FreqLevel枚举类线
*/
void SetRunFrequecy(const FreqLevel &eRunFrequecy);
/**
* @brief 线
* @return const UINT32&:09999
*/
const quint32 &GetRunPriority();
/**
* @brief 线
* @param uRunPriority: UINT32类型09999
*/
void SetRunPriority(const quint32 &uRunPriority);
/**
* @brief 线CPU亲和性掩码
* @return const UINT32&: CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
*/
const quint32 &GetCPUAffinity();
/**
* @brief 线CPU亲和性掩码
* @param uCPUAffinity: UINT32类型CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
*/
void SetCPUAffinity(const quint32 &uCPUAffinity);
/**
* @brief 线
* @param fun:XNCallBack函数包装器类型
* @param freq:FreqLevel类型
* @param pos:UINT32类型
* @param priorty:UINT32类型990
* @details 线
*/
void AddFunction(XNCallBack fun, FreqLevel freq, quint32 pos, quint32 priorty);
private:
/**
* @brief 线CPU亲和性设置
* @return true: 线CPU亲和性成功
* @return false: 线CPU亲和性失败
*/
bool OnSetCPUAffinity();
/**
* @brief 线
* @param args: 线
* @return void*: 线
*/
static void *ThreadFunction(void *args);
/**
* @brief
*/
void InitialFunPool();
};