XNSim/XNCore_Win/XNEventManager/XNEventManager.h

80 lines
2.5 KiB
C++
Raw Permalink 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/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