XNSim/XNCore_Win/XNEventManager/XNEventManager.h

80 lines
2.5 KiB
C
Raw Normal View History

2025-07-19 12:44:06 +08:00
#pragma once
#include <XNBaseFrameObject/XNBaseFrameObject.h>
namespace XNSim {
// 事件优先级定义
namespace XNEvent {
enum class Priority {
RealTime = 0, // 实时优先级
High = 1, // 高优先级
Normal = 2, // 普通优先级
Low = 3 // 低优先级
};
}
// 前向声明私有类
struct XNEventManagerPrivate;
// 事件管理器类继承自XNBaseFrameObject
class XNEventManager : public XNBaseFrameObject {
XN_METATYPE(XNEventManager, XNBaseFrameObject)
XN_DECLARE_PRIVATE(XNEventManager)
public:
// 构造函数,创建事件管理器实例
XNEventManager();
// 析构函数
~XNEventManager();
// 注册事件处理器
// @param eventName: 事件名称
// @param callback: 事件处理回调函数
// @param objectId: 对象ID
// @param async: 是否异步处理该事件
// @param priority: 事件优先级
// @return: 返回处理器ID失败返回-1
XN_INT32
RegisterEventHandler(const XN_STRING &eventName, XNEventCallback callback,
XN_UINT32 objectId, XN_BOOL async = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
// 移除事件处理器
// @param eventName: 事件名称
// @param handlerId: 处理器ID
// @return: 移除是否成功
XN_BOOL RemoveEventHandler(const XN_STRING &eventName, XN_INT32 handlerId);
// 触发指定事件
// @param eventName: 要触发的事件名称
// @param eventData: 事件携带的数据
// @param forceAsync: 强制异步处理
// @param priority: 事件优先级
void TriggerEvent(const XN_STRING &eventName,
const XN_ANY &eventData = XN_ANY(),
XN_BOOL forceAsync = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
// 设置线程池最大线程数
void SetMaxThreadCount(XN_UINT32 count);
// 获取线程池最大线程数
XN_UINT32 GetMaxThreadCount() const;
// 等待所有异步事件处理完成
void WaitForAsyncEvents();
// 设置实时线程池参数
void SetRTThreadPoolConfig(XN_UINT32 maxThreads, XN_UINT32 minPriority,
XN_UINT32 maxPriority);
// 事件处理完成回调
void EventProcessed(const XN_STRING &eventName, XN_BOOL success);
protected:
// 保护构造函数,用于继承实现
XNEventManager(PrivateType *p);
public:
// 初始化事件管理器
virtual XN_BOOL Initialize() override;
// 准备执行
virtual XN_BOOL PrepareForExecute() override;
};
} // namespace XNSim