多线程运行时间控制
while(true)
{...Sleep(10000)}这样控制时间会不会有问题,时间准备吗?会不会锁死?  有没有其它的更好的办法来控制下一次线程while运行的时间?

解决方案 »

  1.   

    如果在线程中Sleep时间过大的话,线程有可能响应不过来,发送给线程的消息得不到及时的处理,建议使用WaitForSingleObject等待
      

  2.   

    就是为了防止不断的CreateThread 所以一单线程Create就while等待2分钟后再次执行.
      

  3.   

    2楼说的,如果等待时间太长,就用WaitForSingleObject:DWORD dw = WAIT_TIME_OUT;while(WAIT_TIME_OUT == dw)
    {
    //do some thing..
    ....dw = WaitForSingleObject(hEvent,time);
    //hEvent 是你创建的事件句柄
    //time 时间间隔 比如 1000*60*10就是10分钟
    }这样的话,如果你用Sleep 10分钟,要是此时你要关闭这个线程,而线程处于Sleep状态,你可能无法立刻关闭但是用这个的话,你可以在外部设置SetEvent(hEvent),线程可以马上退出了一样的等待效果,可是去灵活了很多
      

  4.   

    更灵活的?你的灵活是什么意思哦你如果用SLEEP,没睡够它是不会醒的!但是用等待内核对象,随时可以唤醒一个线程,我是指这个灵活性!
      

  5.   

    waitfor...要好一点,一般不要Sleep
      

  6.   

    WaitForSingleObject等待吧,用sleep,不符合编程逻辑啊  呵呵 而且sleep 不如 WaitForSingleObject 来的灵活
      

  7.   

    Sleep不可靠啊,还是WAITFORSINGLEOBJECT把!
      

  8.   

    服务器char recvBuf[1000];
    ZeroMemory(recvBuf,sizeof(recvBuf));
    if(SOCKET_ERROR==recv(m_socketRev,recvBuf,1000,0))
    {
    TRACE("失败!%d\n",htons(m_addrClient.sin_port)); if(SOCKET_ERROR==send(m_socketRev,"服务器接收失败",strlen("服务器接收失败")+1,0))
    {
          TRACE("服务器接收失败 发送失败\n"); }
    else
    {
         TRACE("服务器接收失败 发送成功\n");
    // m_ListRevConnect.
    }
    }
    else//成功接收客户端
    {
    send(m_socketRev,"成功",strlen("成功")+1,0))
    ...........
    }
    客户端//向服务器发出连接请求
    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
    //发送请求数据
    if(SOCKET_ERROR==send(sockClient,(const char*)&strSend,sizeof(SendStruct)+1,0))
    {
    TRACE("COM=%s发送失败\n",pSC.m_sPort);
    }
    else
    {
    TRACE("COM=%s发送成功\n",pSC.m_sPort);
    }
    //TRACE("Send请求 com=%s\n",pSC.m_sPort);
    //接收数据
    char recvBuf[1000];
    ZeroMemory(recvBuf,sizeof(recvBuf));
    if(SOCKET_ERROR==recv(sockClient,recvBuf,1000,0))
    {
    TRACE("COM=%d接收失败\n",pSC.m_sPort);
    }
    else
    {
    //服务器返回数据
    ..................
    }