这几天在多线程中用socket,遇到了点问题:MFC中的csocket由于不是线程安全的,不能直接在线程中传递。MSDN中有个例子,是在服务器端每次accept一个连接时,将csocket的句柄detach出来,作为参数传入子线程,由子线程生成的csocket再进行attach操作,然后使用。现在我要在客户端采用类似的做法:先开一个子线程(是worker线程),不断尝试与服务器连接,connet成功后,将其句柄detach,以postmessge方式传递给主线程,主线程再生成一个csocket与之attach。结果attach之后,这个socket的send操作可以将数据发送到服务器,但它的onreceive事件好像永远不会被 触发。这个程序事实上是在wce上运行,它的socket类叫做ccesocket,但我觉得这样的问题在本质上应该与x86下没什么区别。我对socket和多线程编程了解太少,百思不得其解,还望各位帮忙。

解决方案 »

  1.   

    socket是个内核对象,和进程相关的, 只要引用计数不为0 就不会被销毁,所以只要不在两个线程中同时操作,在其它线程中使用是可以的。我想既然你的send都是正确的,receive不对肯定是由于其它原因。 wce是什么,机器?OS?不懂
      

  2.   

    wce就是PDA上的windows ce啊,也有一套MFC的。
      

  3.   

    可能不支持CSocket吧.
    你只使用socket看看.在不同的操作系统下,socket原理是一样的,但是有些东西还是不一样的.