本人用线程处理一个非阻塞socket的接收数据,发送数据在主线程中进程.实现过程简单与下:
主线程:
socket connect成功后,AfxBeginThread(myFunc,.....),然后senddata1(1代表第一次)
发送数据等操作
线程函数myFunc简单如下:
...
while(1)
{
     WSAEventSelect(..)
     ......
     WSAWaitForMultipleEvents(..)
     ......
     WSAEnumNetworkEvents()
     
     switch(type.lNetworkEvents)
     {
      case FD_READ:
           senddata();
      ......
      }
}出现的问题是:连接成功后第一次发送的数据在线程函数中得到响应,但在第二次,第三次的发送数据
线程却不能通过WSAWaitForMultipleEvents,请问是什么原因呢?还有两个问题:
1.WSAEventSelect(..)等函数应该写在什么地方,写在线程里合适吗?
我写在线程主要是考虑它的循环
请高手指点,谢谢!

解决方案 »

  1.   

    WSAEventSelect(..)函数写在while循环体外面
      

  2.   

    WSAEventSelect(..)位置不对,最好是在AfxBeginThread之前
      

  3.   

    每次有事件之后,都要使用WSAResetEvent()来重置事件
      

  4.   

    对于侦听的套接字,WSAEventSelect放在启动线程之前对于连接套接字的描述字,放在while循环内
      

  5.   

    大哥们,我已按你们的方法修改了,但修改后WSAWaitForMultipleEvents也只是成功一次,而且这次成功连不是FD_READ,怎么回事啊?
      

  6.   

    WSAEventSelect(..)我已摆在AfxBeginThread前面啦,
    连connect也摆在了AfxBeginThread后面
    现在的流程是:
    WSAEventSelect()---->AfxBeginThread()---->connect()---->send()