相关UML如下:
添加:
处理
关键代码解析:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

m_QueueServiceThread.InitThread(m_hCompletionPort);
他悄悄的给完成端口句柄扔给了服务线程,偶们去看看服务线程拿这玩意干了啥,,,






























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








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












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