创建此线程后,我会在线程完成执行之前立即将其杀死。
我假设您的意思是您正在TerminateThread()
以下列方式使用:
HANDLE thread = CreateThread(...);
// ...
// short pause or other action?
// ...
TerminateThread(thread, 0); // Dangerous source of errors!
CloseHandle(thread);
如果是这种情况,则不,执行的线程RecordThread()
将在另一个线程调用时准确地停止TerminateThread()
。根据TerminateThread()
文档中的注释,这个确切的点有点随机,取决于您无法控制的复杂时序问题。这意味着您无法在线程内处理适当的清理,因此,您应该很少(如果有的话)杀死线程。
请求线程完成的正确方法是WaitForSingleObject()
这样使用:
HANDLE thread = CreateThread(...);
// ...
// some other action?
// ...
// you can pass a short timeout instead and kill the thread if it hasn't
// completed when the timeout expires.
WaitForSingleObject(thread, INFINITE);
CloseHandle(thread);