一种简单的消息和事件传递模型
来源:互联网 发布:智明创发软件待遇 编辑:程序博客网 时间:2024/06/06 23:55
在日常的工作中,我们经常需要处理消息和事件的业务逻辑。这里先以最精简的代码简要说明<相关结构定义并未提供,只提供一种思路>,后续会不断扩充和完善。
基类和控制器
class CUnitBase{public: enum UnitType { unit_A, unit_B, };public: CUnitBase(); virtual ~CUnitBase(); virtual void Init(UnitType tp) { m_type = tp; } virtual BOOL OnMsg(PACKET_COMMAND* pPacket) = 0; virtual BOOL OnEvent(Event* pEvent) = 0;protected: UnitType m_type;}class CUnitCtrl{public: CUnitCtrl(); ~CUnitCtrl(); void Init(); BOOL OnMsg(PACKET_COMMAND* pPacket); BOOL OnEvent(Event* pEvent);private: CUtlLinkedList<CUnitBase*> m_unitList;}
1.注册派生类 2.将消息和事件传递给派生类
#define REGIST_UNIT(ActCls,tp) \ pUnit = new ActCls; \ pUnit->Init(tp); \ m_unitList.AddToTail(pUnit);void CUnitCtrl::Init(){ REGIST_UNIT(CUnitA, CUnitBase::unit_A); REGIST_UNIT(CUnitB, CUnitBase::unit_B);}BOOL CUnitCtrl::OnMsg(PACKET_COMMAND* pPacket){ FOR_EACH_LIST(m_unitList, index) { CUnitBase* pUnit = m_unitList.Element(index); if(pUnit->OnMsg(pPacket)) return TRUE; } return FALSE;}BOOL CUnitCtrl::OnEvent(Event* pEvent){ FOR_EACH_LIST(m_unitList, index) { CUnitBase* pUnit = m_unitList.Element(index); if(pUnit->OnEvent(pEvent)) return TRUE; } return FALSE;}
派生类的定义
class CUnitA : public CUnitBase{public: CUnitA() ~CUnitA() virtual BOOL OnMsg(PACKET_COMMAND* pPacket); virtual BOOL OnEvent(Event* pEvent);}class CUnitB : public CUnitBase{public: CUnitB() ~CUnitB() virtual BOOL OnMsg(PACKET_COMMAND* pPacket); virtual BOOL OnEvent(Event* pEvent);}
效果示例
CUnitCtrl m_unitCtrl;m_unitCtrl->Init();m_unitCtrl->OnMsg();m_unitCtrl->OnEvent();==> A OnMsg OnEvent==> B OnMsg OnEvent
阅读全文
0 0
- 一种简单的消息和事件传递模型
- java actor模型和消息传递简单示例
- Kilim:actor模型和消息传递的Java实现
- QWidget消息传递的一种方法
- EGL中一种消息传递的解决方案
- C#窗体之间传递消息和事件
- 03_Qt的事件传递、消息过滤器和消息通知(类与类之间通讯)
- 网络编程事件模型和窗口消息模型中FD_WRITE的理解要点
- 一种消息传递方式,很好
- Queue 消息的发送与接收(PTP 消息传递模型)
- 一种简单的多进程编程模型
- 简单实现一种经典的数据传输模型
- 一种基于ACE的简单应用程序模型
- java线程间通信[实现不同线程之间的消息传递(通信),生产者和消费者模型]
- android的消息传递简单实例
- <Handler>之简单的消息传递机制
- EventBus的简单使用,消息传递
- 内核和用户空间的消息传递-事件通知 (2)
- iframe.contentWindow
- 基于Selenium的Python Web应用自动化测试入门
- PAT A1023. Have Fun with Numbers
- hdu 2047 阿牛的EOF牛肉串(递推)
- Android 系统卡制作方式
- 一种简单的消息和事件传递模型
- JS正则表达式
- 在编程中实现两个变量的值交换
- SQL查询去除汉字保留数字 保留小数
- jQuery-层次选择器
- go语言中的main函数和init函数
- Viewpager+Fragment实现左右滑动切换页面
- 西瓜书《机器学习》课后答案——Chapter3_3.5
- Java接口全解析