我在阻止线程中的退出函数时遇到问题。
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调用的函数调用。所以我不能评论或删除此声明。
我想阻止线程退出信号,我该怎么办?
如何阻止来自后台线程的退出信号?
答案 0 :(得分:0)
好吧,退出进程(至少在Windows上)不是好方法,所以如果你喜欢ERROR_SUCCESS(0),你自然应该在main函数中返回一个错误代码。
所以说到这一点,退出更像是一个强制退出,而不是你应该做的事情,我只能假设它在引擎盖下调用ExitProcess(0),你可以在ExitProcess的文档中读到它它完成它所说的,立即退出进程而不发送信号或等待任何事情(如待处理的操作),所以你最好的办法是利用DLL加载并创建一个假的kernel32.dll,你阻止退出进程或任何退出()实际上是调用,或者在内存中执行整个操作,比如用nop来填充调用exit,这样就什么都不做。
我只能假设您正在使用其他人的代码,以便您无法对其进行注释,在这种情况下,您可以尝试一些调试助手库,它们允许您使用调试器功能(如断点),并且只需跳过退出,如果它不是来自主线程。