最近接手一个MFC老项目,Bug太多,主线程退出的时候,也不管子线程死活,直接退出,导致子线程又去访问那些被释放的资源,结果程序无法关闭,或者导致进程在后台驻留了。
这里提供一种简单粗暴的方法:
//强行结束自己
void TerminateApp()
{
HANDLE hself = GetCurrentProcess();
TerminateProcess(hself, 0);
}
线程终止满足如下条件之一:
1、线程函数返回
2、线程执行中调用ExitThread
3、同一进程下 任意线程调用TerminateThread指出该线程的Handle
4、同一进程下 任意线程调用TerminateProcess结束该线程所在的进程
5、该线程所在的进程中任意线程调用ExitProcess
由于高级语言编译的程序在(正常)结束的时候都会调用ExitProcess,所以系统会强行终止它的所有线程(如果之前还没结束的话)。