我有个疑惑,其实也不算是疑惑。通过看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(窗口)呢?
抽时间深入研究一下。