2014-02-09 69 views
0

我有线程中阻塞退出函数的问题。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调用的函数调用。所以我不能评论或删除这个声明。

我想阻塞线程的退出信号,我该怎么做?

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

+0

你不能,afaik。你介意告诉我们什么样的代码是?我的意思是,为什么你不能只是改变代码? – manuell

回答

0

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

因此,据说,退出更像是一个强制退出,与您通常应该做的事情相比,我只能假定它在引擎盖下调用ExitProcess(0),您可以在文档中阅读它ExitProcess按照它所说的立即退出该进程而不会发出信号或等待任何事情(如挂起的操作),因此最好的办法是利用DLL加载并创建一个假的kernel32.dll,以阻止exitprocess或任何退出( )实际上是打电话,或者做记忆中的整个事情,比如填充呼叫以使用nop退出,所以它什么也不做。

我只能假设你正在使用别人的代码,以便为什么你不能注释它,在这种情况下,你可以尝试一些调试助手库,它允许你使用调试器功能,如断点和简单如果它不是来自主线程,则跳过出口。