msdn Illustrates Using Sockets in Multiple Threads

解决方案 »

  1.   

    用FromHandle,由于MFC的handle table是按线程维护的,跨线程使用恐怕不会成功;
    用Attach之前必须保证socket句柄已经被Detach了,也就是说,这个socket句柄未跟任何MFC对象关联,即,传递socket句柄之前必须首先调用Detach,而后线程中的Attach才能成功。
    这都很麻烦,也不方便,但如果要使用CAsyncSocket,别无它法。
    你如果直接用socket api,可能问题反而会简化。
      

  2.   

    不对吧,核心对象的 handle table应该是以进程为单位的吧。
    我认为你的方法是可行的。仔细看看SockCore.cpp
      

  3.   

    Attatch()方法肯定是可以的.我就是这样用的。如:
    CTSocket:public CAsyncSocket
    {
        ...........
    }CTSocket * socket;
    socket->Create(....);
    AfxBeginThread(SocketThread,socket->Detach());UNIT SocketThread(LPVOID lp)
    {
      CTSocket * p;
      p->Attatch((socket)lp);
     .....
    }
    旧可以了,实验一下把。