closehandle可不能随便用

今天在项目里涉及多线程时。本来是想用TerminateThread来结束一个线程,可惜由于线程里用到了Socket。如果用这种方式强制结束线程,会使得部分Socket没有释放,故重新启动线程后,部分网络端口无法使用。最后想到了使用Event事件来结束线程的方式。于是设置一个Event事件。在While循环里先判断是否已经激发了退出事件,如果激发,就关闭Socket并退出。在根据书上的代码,在激活事件SetEvent后,我也调用了CloseHandle,把事件句柄关闭。结果发现它总是无法正常工作,后来通过打印WaitForSingleObject的返回值,发现居然是-1。猜想可能是由于Closehandle引起的。于是将SetEvent后的Closehandel函数注释后,可以正常工作。还不太了解CloseHandle的工作原理,及响应时间。费了我那么多时间去调试。

你可能感兴趣的:(多线程,工作,socket,网络)