事件系统,在每个模块之间发挥着桥梁的作用,桥梁健壮,整个系统会更加健康。
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中的事件是按照优先级排序的。