您的位置:首页 > 产品设计 > UI/UE

网狐棋牌代码分析(二) CQueueServiceEvent初步分析

2017-09-19 15:07 369 查看
(有什么问题欢迎指教,企鹅:2172243813 更多资讯尽在www.ttkmwl.com)






 
代码分析:

首先CQueueServiceEvent这个名字很有诱惑,,,你感觉他是一个事件,其实不是。它实际的功能应该是一个带打包功能的事件队列,,,或者说是一个像指定的类似EventQueue的东东中投递事件。从接口上看,这个东东能投递TimerEvent DataBaseEvent  SocketAcceptEvent SocketReadEvent  SocketCloseEvent

应为它本身持有一个CQueueService指针,所以本身并不负责数据管理,只负责打包并添加到CQueueService实例中去。

先看定时器事件: 1   //定时器事件

2    boolPostTimerEvent(WORD wTimerID, WPARAM wBindParam)

3    {

4       //效验参数

5       ASSERT(m_pIQueueService!=NULL);

6       if (m_pIQueueService==NULL) return false;

7

8       //缓冲锁定

9       CThreadLockHandle BufferLockHandle(&m_BufferLock);

10

11       //投递消息

12       NTY_TimerEvent * pTimerEvent=(NTY_TimerEvent *)m_cbBuffer;

13       pTimerEvent->wTimerID=wTimerID;

14       pTimerEvent->wBindParam=wBindParam;

15       m_pIQueueService->AddToQueue(EVENT_TIMER,m_cbBuffer,sizeof(NTY_TimerEvent));

16

17       return true;

18    }

嗯哼,代码质量很高哈,,,

入口都有断言在debug阶段帮助暴露错误,断言之后还有if语句再次判断,这样即使release版本错误也不会被漏掉,,,

关于事件的封装,在这里其实已经分层了,,,

这里是第一层:

1struct tagDataHead

2 {

3   WORD                           wDataSize;                           //数据大小

4   WORD                           wIdentifier;                       //类型标识

5   DWORD                           dwInsertTime;                   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: