2014-02-09 66 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退出,所以它什麼也不做。

我只能假設你正在使用別人的代碼,以便爲什麼你不能註釋它,在這種情況下,你可以嘗試一些調試助手庫,它允許你使用調試器功能,如斷點和簡單如果它不是來自主線程,則跳過出口。