可以,在创建线程的时候把过去的socket的地址传入就可以

解决方案 »

  1.   

    可以,传socket的句柄,而不是地址。
      

  2.   


    一般不能跨线程使用SOCKET,会产生未可预料的后果。
    具体原因你可以去查查MSDN。
      

  3.   

    可以,但应该传socket的句柄,而不是地址。
      

  4.   

    可以,使用SOCKET 别使用CSocket
      

  5.   


    CSocket是绝对肯定不能跨线程使用的。
    这个绝对是对的。
      

  6.   

    当然可以,你只要有这个SOCKET的句柄就行。
    通常的通讯程序(使用Socket而不是MFC)都是这样写:在主线程中发送,在工作线程中接收。
    这就需要在不同的线程中使用同一SOCKET。
    不但可以在不同线程中使用,还能在不同进程中使用。因为SOCKET句柄是系统唯一的。
      

  7.   

    CAsyncSocket也可以跨线程,我就做过。使用Detach和Attach,不过要加一小段补丁代码。使用起来还是挺方便的。    ⌒ ⌒
        ⊙ ⊙      鱼儿鱼儿水中游,鱼儿游啊游,游得乐悠悠。
          ∪        鱼儿鱼儿慢慢游,鱼儿乐悠悠,从不觉不自由。
          ≈
      

  8.   

    同意west_wood(拧发条鸟)的观点如果你使用的是CSocket,需要在主线程中Detach(),获得SOCKET句柄,然后将SOCKET 句柄传递到另一个线程X。
    如果X线程是工作者线程(worker-thread),则直接使用该句柄一般会产生一些问题:CSocket是异步SOCKET,这些属性直接绑定在SOCKET句柄上,而不是CSocket类中;因此,直接使用该句柄执行Read操作将回失败,系统报告“在非阻塞套接口上执行阻塞操作”之类的错误。如果X线程是界面线程,则可以将该句柄Attach到一个CSocket对象。这是需要注意这个CSocket对象的存活期。另外,在线程间传递的SOCKET句柄只能关闭一次。