事件消息系统

事件系统设计详解

事件系统,在每个模块之间发挥着桥梁的作用,桥梁健壮,整个系统会更加健康。

1,事件定义
          系统所有事件ID,都定义在枚举类型中:
                       enum
{
     EVENT_NONE=0,
     EVENT_LIST,
     ...
     EVENT_COUNT
}
    事件的处理,本质就是函数处理。定义事件,就是建立事件ID与处理函数的对应关系。结构如下:

    

   

callfun 就是类函数指针。EventTarget是接收事件的类对象。所以要处理事件的类都需要继承EventProtocol。
除了事件ID之外,应该还定义一个事件子ID.事件子ID定义在每个处理单元中。

     2,事件数据结构
              
             主要满足处理事件需要的各种参数。根据实际情况,定义参数个数。
             调用事件处理函数:eventDef->_EventTarget->(*callfun)(event, _ownerData)

     3,事件构架接口
         
          需要接收处理事件的单元,必须继承此接口,实现excute(const EVENT*pSender, void*pData).
          在事件系统中注册此事件处理单元,就是把该类的函数excute的地址传给EVENT_DEFINE中的callfun。

     4,事件系统
         

         eventVector1存储的是事件处理函数中发送过来的事件。
         一般来说,通过timer调用CEventSystem的update函数。update函数:

          update函数处理流程:

         

     如果事件存在优先级的问题,在postEvent函数中,事件插入eventVector时,需要找到合适的位置。eventvector中的事件是按照优先级排序的。


     

转载于:https://my.oschina.net/xbsk/blog/52570

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值