XNSim/Release/include/XNCore/XNEventManager.h

77 lines
2.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include "XNBaseFrameObject.h"
// 事件优先级定义
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
int RegisterEventHandler(const std::string &eventName, XNEventCallback callback,
uint32_t objectId, bool async = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
// 移除事件处理器
// @param eventName: 事件名称
// @param handlerId: 处理器ID
// @return: 移除是否成功
bool RemoveEventHandler(const std::string &eventName, int handlerId);
// 触发指定事件
// @param eventName: 要触发的事件名称
// @param eventData: 事件携带的数据
// @param forceAsync: 强制异步处理
// @param priority: 事件优先级
void TriggerEvent(const std::string &eventName, const std::any &eventData = std::any(),
bool forceAsync = false,
XNEvent::Priority priority = XNEvent::Priority::Normal);
// 设置线程池最大线程数
void SetMaxThreadCount(int count);
// 获取线程池最大线程数
int GetMaxThreadCount() const;
// 等待所有异步事件处理完成
void WaitForAsyncEvents();
// 设置实时线程池参数
void SetRTThreadPoolConfig(int maxThreads, int minPriority, int maxPriority);
// 事件处理完成回调
void EventProcessed(const std::string &eventName, bool success);
protected:
// 保护构造函数,用于继承实现
XNEventManager(PrivateType *p);
public:
// 初始化事件管理器
virtual bool Initialize() override;
// 准备执行
virtual bool PrepareForExecute() override;
};