C++阻止线程退出信号/函数



我在线程中阻塞退出函数时遇到问题。

DWORD WINAPI thread1Func( LPVOID lpParam ) 
{
exit(0); // Problem is there
while(true){
printf("runnging");
Sleep(1000);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int thread1 = 1;
HANDLE thread1Handle = 0;
thread1Handle = CreateThread( 0, 0, 
thread1Func, &thread1, 0, NULL);  
WaitForSingleObject(thread1Handle,0);
system("pause");
return 0;
}

不幸的是,我在main函数中创建的线程调用了exit(0)函数。

thread1Func不直接调用exit(0)语句。它由thread1Func调用过的函数调用。因此,我不能对此发表评论或删除此声明。

我想阻止线程的退出信号,该怎么办?

如何阻止后台线程的退出信号?

好吧,退出进程(至少在windows上)不是一个好方法,所以如果你喜欢error_SUCCESS(0),那么自然应该在主函数中返回一个错误代码。

话虽如此,与你通常应该做的事情相比,退出更像是一种强制退出,我只能假设它在引擎盖下调用ExitProcess(0),正如你在ExitProcess的文档中所读到的那样,它会按照它所说的去做,立即退出进程,而不会发出信号或等待任何事情(比如挂起的操作),因此,你最好的办法是利用DLL加载并创建一个假的kernel32.DLL,在那里你可以阻止exitprocess或exit()实际调用的任何东西,或者在内存中完成整个操作,比如用nop填充退出调用,这样它就什么都不做了。

我只能假设你正在使用别人的代码,所以你不能注释掉它。在这种情况下,你可以尝试一些调试帮助程序库,这些库允许你使用调试器功能,如断点,如果它不是来自主线程,只需跳过退出。

最新更新