for(unsigned int i = 0; i < m_vClientTask.size(); ++i)
{
CloseConnection(m_vClientTask[i].sock);
WaitForSingleObject(m_vClientTask[i].hThread, 1000);//INFINITE);
CloseHandle(m_vClientTask[i].hThread);
}
这里用WaitForSingleObject(m_vClientTask[i].hThread,1000),设为等1秒钟是什么用处?以前我只用过INFINITE,设为互斥操作,其实很早以前我就对此有疑问,能指定秒数,这样的功能到底有什么好处?

解决方案 »

  1.   

    This function returns when the specified object is in the signaled state or when the time-out interval elapses.
      

  2.   

    DWORD WaitForSingleObject(
      HANDLE hHandle,        // handle to object to wait for
      DWORD dwMilliseconds   // time-out interval in milliseconds
    );
    dwMilliseconds 
    Specifies the time-out interval, in milliseconds. The function returns if the interval elapses, even if the object's state is nonsignaled. If dwMilliseconds is zero, the function tests the object's state and returns immediately. If dwMilliseconds is INFINITE, the function's time-out interval never elapses. 如果是0,立即返回;如果为INFINITE则超时间隔是无限的,只有在作为其参数的同步对象产生信号时才返回。
    http://wenku.baidu.com/view/e43075d376eeaeaad1f330c8.html
      

  3.   

    设置了时间后,如果时间是有信号状态返回 WAIT_OBJECT_0 ,如果时间超过 dwMilliseconds 值但时间事件还是无信号状态则返回 WAIT_TIMEOUT 
      

  4.   

    看看这个
    http://www.cnblogs.com/andyhere/archive/2008/10/20/1314803.html
      

  5.   

    建议你用 WaitForMultipleObjects 一次性等待多个线程结束,不用在循环里都等上1秒。我通常这样做:1、把所有的线程句柄保存到一个句柄数组中
    2、循环对每个线程都调用 CloseConnection 一次
    3、调用 WaitForMultipleObjects 等待若干时间
    4、如果超时,对超时的线程强制Kill
      

  6.   

    等1秒钟是什么用处? =》等它1秒,等不到就回来了。
    这样的功能到底有什么好处? =》程序的控制权又交给你了。你可以继续等(相当于INFINITE),或做其他事情。
      

  7.   

    WaitForSingleObject 函数用来检测 hHandle 事件的信号状态,当函数的执行时间超过 dwMilliseconds 就返回,但如果参数 dwMilliseconds 为 INFINITE 时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject 有返回直才执行后面的代码。在
      

  8.   

    对于这种等待多个信号的应该使用WaitForMultipleObjects才对像你这样用的话,可能会导致无限等待
      

  9.   

    设置了时间后,如果时间是有信号状态返回 WAIT_OBJECT_0 ,如果时间超过 dwMilliseconds 值但时间事件还是无信号状态则返回 WAIT_TIMEOUT 
    WaitForSingleObject 函数用来检测 hHandle 事件的信号状态,当函数的执行时间超过 dwMilliseconds 就返回,但如果参数 dwMilliseconds 为 INFINITE 时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject 有返回直才执行后面的代码
      

  10.   

    因为你有for循环,如果用INFINITE 无限等待程序会假死在这上,除非此时有信号过来设置时间,当超过这个时间程序会自动跳转到下面语句,不会出现假死现象。
      

  11.   

    有可能是延时1秒
    另外,如果需要提供结束等待,则可以给event设信号