CSocket::SendMessage()
{
     Send(.....);
     for(int i;i<100;i++)
     {
           if(收到数据)
                  break;
           sleep(100);     //等待接收返回数据并处理
     }
}
为什么在sleep期间CSocket::OnReceive(int nErrorCode)不执行,

解决方案 »

  1.   

    CSocket tcp;全局变量
    CWinThread::OnTimer()
    {
         tcp.Send(.....);
         for(int i;i<100;i++)
         {
               if(tcp收到数据)
                      break;
               sleep(100);     //等待接收返回数据并处理
         }
    }
    这样不是只挂起CWinThread吗,但tcp.OnReceive(int nErrorCode)也不执行
      

  2.   

    是tcp跟CWinThread用了同一个消息队列吗?有什么办法?
      

  3.   

    程序要求是,发送一个包,收到返回或超时再发下一个
    http://community.csdn.net/Expert/topic/3855/3855354.xml?temp=.7537805
    还有分
      

  4.   

    发送一个包,然后定时检测有没有返回包,. 但是不能象你这样在一个消息里SELLP.这样CSocket的消息都收不到了. 它跟你的消息是同一个线程内的.你的消息处理中断了,它的消息也被堵在消息队列里了.伪代码:OnTimer()
    {
    if(没有标志) {
      send();
      设置为标志A;
    }
    else if(是标志A)
    {
      检测有没有返回数据;
      if(有返回数据了)
      {
         处理返回数据;
         设置标志为C,准备进入下一个消息的发送;  
      }
    }
    else if(是标志C)
    {
       send(第二阶段数据);
       设置标志D;
    }
    else if(是标志D)
     ...}
      

  5.   

    你想这样做的话,因该单起一个thread发送消息,这样子sleep就不会干绕到其他部分了