关于Windows Socket是不是一个线程的多个Socket共享消息泵

我有个疑惑,其实也不算是疑惑。通过看MFC的代码发现,同一个线程创建的Socket,这些Socket会共享消息泵。

代码如下:

 

程序会判断m_pmapSocketHandle是否为空,如果空则创建CSocketWnd,然后将Socket句柄和CAsyncSocket对象的指针添加到这个映射表中,这种情况说明,只有当前线程执行第一次AttachHandle时才会创建这个CSocketWnd,线程状态中的m_hSocketWindow变量被赋予新创建的CSocketWnd。

 

   在我的理解是,你在线程T1中如果调用了CSocket.Attach(hSocket),尽管你的hSocket是在T2线程中创建的,当关于hSocket的事件来临时,处理hSocket事件的OnReceive,OnClose等事件处理函数,还是由T1来执行的。我调试跟踪代码,也是和我猜测的一致。但是目前我没有找到微软的官方文档说明这件事情。

   我不理解,Windows操作系统如何知道将某个Socket的事件,发送给对应的HWND(窗口)呢?

抽时间深入研究一下。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值