如果我们强行终止正在运行的线程会发生什么
我有一个线程RecordThread()
它调用一些复杂且耗时的函数。在我使用的这些函数中试着抓块、分配和释放内存以及使用临界区变量等。
like
void RecordThread()
{
AddRecord();
FindRecord();
DeleteRecord();
// ...
ExitThread(0);
}
创建该线程后,我会在该线程完成执行之前立即杀死它。这种情况下如果强行杀死线程会发生什么情况呢?执行内部函数(AddRecord
, DeleteRecord
)在我们杀死线程后完成它们的执行?
创建该线程后,我会在该线程完成执行之前立即杀死它。
我假设你的意思是你正在使用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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)