查看: 257|回复: 1

网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)

[复制链接]

7

主题

34

帖子

199

积分

vip会员

Rank: 1

积分
199
发表于 2020-3-27 16:04:54 | 显示全部楼层 |阅读模式

秘密在此:
GetQueuedCompletionStatus(m_hCompletionPort,&dwThancferred,(PULONG_PTR)&pQueueService,&pOverLapped,INFINITE)
m_hCompletionPort是通过线程参数传递进来的,dwThancferred和pQueueService是在之前CQueueService::AddToQueue()中Post过来的参数,,,

网狐棋牌(一) ServerKernel中的IQueueService接口分析(2) // 加入数据
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)
bool __cdecl CQueueService::AddToQueue(WORD wIdentifier,  void *  const pBuffer, WORD wDataSize)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2) {
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    CThreadLockHandle LockHandle(&m_ThreadLock);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    m_DataStorage.AddData(wIdentifier,pBuffer,wDataSize);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    PostQueuedCompletionStatus(m_hCompletionPort,wDataSize,(ULONG_PTR)this,NULL);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    return true;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)}


数据经过完成端口在CQueueServiceThread绕一圈以后会回到CQueueService::OnQueueServiceThread()

网狐棋牌(一) ServerKernel中的IQueueService接口分析(2) // 数据消息
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)
void CQueueService::OnQueueServiceThread( const tagDataHead & DataHead,  void * pBuffer, WORD wDataSize)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2) {
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    ASSERT(m_pIQueueServiceSink!=NULL);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    try   
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    {
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)        m_pIQueueServiceSink->OnQueueServiceSink(DataHead.wIdentifier,pBuffer,DataHead.wDataSize,DataHead.dwInsertTime);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    }
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    catch (网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)) {}
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)    return;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(2)}

这样队列服务就完成了他的使命,将执行的消息,异步的交给指定接口去处理,,, 稍后将对列队列服务做个宏观上的的分析,,,下班时间到,,,回去继续,,, 用一句话来描述QueueService模块就是: 将队列的插入和处理通过关联到完成端口上以实现在IOCP线程池管理下异步处理; Add以后投递完成消息,在完成端口上监听的线程受到消息以后读取数据并处理;

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部