最近接手一個MFC老項目,Bug太多,主線程退出的時候,也不管子線程死活,直接退出,導致子線程又去訪問那些被釋放的資源,結果程序無法關閉,或者導致進程在後臺駐留了。
這裏提供一種簡單粗暴的方法:
//強行結束自己
void TerminateApp()
{
HANDLE hself = GetCurrentProcess();
TerminateProcess(hself, 0);
}
線程終止滿足如下條件之一:
1、線程函數返回
2、線程執行中調用ExitThread
3、同一進程下 任意線程調用TerminateThread指出該線程的Handle
4、同一進程下 任意線程調用TerminateProcess結束該線程所在的進程
5、該線程所在的進程中任意線程調用ExitProcess
由於高級語言編譯的程序在(正常)結束的時候都會調用ExitProcess,所以系統會強行終止它的所有線程(如果之前還沒結束的話)。