XNSim/XNCore/XNThreadManager.h

193 lines
5.7 KiB
C
Raw Normal View History

2025-04-28 12:25:20 +08:00
/**
* @file XNThreadManager.h
* @author jinchao
* @brief 线
* @version 1.0
* @date 2024-11-06
*
* @copyright Copyright (c) 2024 XN
*
*/
#pragma once
#include "XNBaseFrameObject.h"
class XNThreadManagerPrivate;
/**
* @brief 线
* @details 线线
*/
class XNThreadManager : public XNBaseFrameObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(XNThreadManager)
Q_DISABLE_COPY(XNThreadManager)
public:
/**
* @brief 线
*/
explicit XNThreadManager(QObject *parent = nullptr);
/**
* @brief 线
*/
virtual ~XNThreadManager();
protected:
/**
* @brief 线
* @param dd:XNThreadManagerPrivate类型
* @param parent:QObject类型
* @details
*/
XNThreadManager(XNThreadManagerPrivate &dd, QObject *parent = nullptr);
signals:
/**
* @brief 仿
* @param simTime: timespec结构体类型线
* @details 使线
*/
void SetStartTime(const timespec &simTime);
/**
* @brief 线
* @param dRunInter: double类型线
*/
void SetRunInter(const double &dRunInter);
/**
* @brief 仿
* @param objectId: ID
* @param cmd: 仿
*/
void SimControl(quint32 objectId, SimControlCmd cmd);
public slots:
/**
* @brief
* @details 线
*/
void OnStart();
/**
* @brief
* @details 线
*/
void OnAbort();
/**
* @brief
* @details 线
*/
void OnPause();
/**
* @brief
* @details 线
*/
void OnContinue();
/**
* @brief 线
* @return true:
* @return false:
* @details 线
*/
virtual void OnInitialize() override;
/**
* @brief 仿
* @note 线线
*/
virtual void OnPrepareForExecute() override;
/**
* @brief 仿
* @param objectId: ID
* @param cmd: 仿
*/
void OnSimControl(quint32 objectId, SimControlCmd cmd);
/**
* @brief 仿
* @param dBaseFreq: double类型Hz
* @details 仿线 1 1/2 1/4 1/8 1/16 1/32
*/
void OnSetBaseFreq(const double &dBaseFreq);
public:
/**
* @brief
* @return RunStatus: 线
* @details 线
*/
RunStatus GetStatus();
/**
* @brief 仿
* @return const double&: Hz
*/
const double &GetBaseFreq();
/**
* @brief 仿
* @return const double&:
* @details
*/
const double &GetBaseInter();
/**
* @brief
* @param dBaseInter:double类型
* @details 使
*/
void SetBaseFreqByInter(const double &dBaseInter);
/**
* @brief 线
* @return quint32: 线
*/
quint32 GetThreadCount();
public slots:
/**
* @brief 线
* @param name: XNString类型线
* @param freq: FreqLevel枚举类型线
* @param priority: UINT32类型线990
* @param CPUAff: UINT32类型线CPU亲和性掩码CPU核是否使用0使1使
* 0x00000003使0,1CPU
* @param RunInter: double类型线
* @details 线
*/
virtual void OnAddThreadPool(QString name, FreqLevel freq, quint32 priority, quint32 CPUAff,
double RunInter);
/**
* @brief 线
* @param id: UINT32类型ID
* @param fun: XNCallBack函数包装器类型
* @param freqGroup: UINT32类型0121/431/841/1651/32
* @param RunPos: UINT32类型<2^(freqGroup)
* @param RunPriorty: UINT32类型990
* @return true:
* @return false:
* @details 线
*/
void OnRegisterFunction(quint32 id, XNCallBack fun, quint32 freqGroup, quint32 RunPos,
quint32 RunPriorty);
private:
/**
* @brief
* @param freqGroup: UINT32类型0121/431/841/1651/32
* @param RunPos: UINT32类型<2^(freqGroup)
* @return true:
* @return false:
*/
bool IsFunParamRight(quint32 ModelID, quint32 freqGroup, quint32 RunPos);
quint32 AllocateThreadID();
};