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,设为互斥操作,其实很早以前我就对此有疑问,能指定秒数,这样的功能到底有什么好处?
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
http://www.cnblogs.com/andyhere/archive/2008/10/20/1314803.html
2、循环对每个线程都调用 CloseConnection 一次
3、调用 WaitForMultipleObjects 等待若干时间
4、如果超时,对超时的线程强制Kill
这样的功能到底有什么好处? =》程序的控制权又交给你了。你可以继续等(相当于INFINITE),或做其他事情。
WaitForSingleObject 函数用来检测 hHandle 事件的信号状态,当函数的执行时间超过 dwMilliseconds 就返回,但如果参数 dwMilliseconds 为 INFINITE 时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到 WaitForSingleObject 有返回直才执行后面的代码
另外,如果需要提供结束等待,则可以给event设信号