查看: 233|回复: 1

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

[复制链接]

7

主题

34

帖子

199

积分

vip会员

Rank: 1

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

关键代码解析:


1 网狐棋牌(一) ServerKernel中的IQueueService接口分析(1) // 开始服务
2 网狐棋牌(一) ServerKernel中的IQueueService接口分析(1) bool __cdecl CQueueService::StartService()
3 网狐棋牌(一) ServerKernel中的IQueueService接口分析(1) {
4网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //效验参数
5网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    ASSERT(m_bService==false);
6网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    ASSERT(m_hCompletionPort==NULL);
7网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    ASSERT(m_pIQueueServiceSink!=NULL);
8网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
9网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //建立完成端口
10网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //! 需要追踪一下这里的完成端口句柄
11网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //! 首先分析这里的创建,INVALID_HANDLE_VALUE表示没有关联任何文件句柄,也就是
12网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //! 说不存在某个实现某个操作完成以后系统自动给这个完成端口post一个完成消息的概念
13网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //! 然后这里用限制工作线程数是1,也就是同意时刻只会有一条线程受到完成消息
14网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    m_hCompletionPort=CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,NULL,1);
15网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    if (m_hCompletionPort==NULL) throw TEXT("队列对象完成端口创建失败");
16网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
17网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //启动线程
18网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    if (m_QueueServiceThread.InitThread(m_hCompletionPort)==false) throw TEXT("队列对象线程初始化失败");
19网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    if (m_QueueServiceThread.StartThead()==false) throw TEXT("队列对象线程启动失败");
20网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
21网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //设置参数
22网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    m_bService=true;
23网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
24网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    return true;
25网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)}

m_QueueServiceThread.InitThread(m_hCompletionPort);
他悄悄的给完成端口句柄扔给了服务线程,偶们去看看服务线程拿这玩意干了啥,,,
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1) // 运行函数
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
bool CQueueServiceThread::RepetitionRun()
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1) {
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //效验参数
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    ASSERT(m_hCompletionPort!=NULL);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //变量定义
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    DWORD dwThancferred=0;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    OVERLAPPED * pOverLapped=NULL;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    CQueueService * pQueueService=NULL;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    //等待完成端口
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    if (GetQueuedCompletionStatus(m_hCompletionPort,&dwThancferred,(PULONG_PTR)&pQueueService,&pOverLapped,INFINITE))
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    {
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        //判断退出
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        if (pQueueService==NULL) return false;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        //获取数据
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        tagDataHead DataHead;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        bool bSuccess=pQueueService->GetData(DataHead,m_cbBuffer,sizeof(m_cbBuffer));
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        ASSERT(bSuccess==true);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        //处理数据
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        if (bSuccess==true) pQueueService->OnQueueServiceThread(DataHead,m_cbBuffer,DataHead.wDataSize);
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)        return true;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    }
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)    return false;
网狐棋牌(一) ServerKernel中的IQueueService接口分析(1)}




回复

使用道具 举报

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

本版积分规则

 
 



邮件留言:


 
返回顶部