2014-02-09 4 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; 
} 

К сожалению, нить, которую я создал в основной функции, вызывает функцию выхода (0).

thread1Func не вызывает вывод (0) заявление напрямую. он вызывается функциями, которые были вызваны thread1Func. Поэтому я не могу комментировать или удалять это утверждение.

Я хочу заблокировать сигнал выхода из потока, что мне делать?

Как заблокировать сигналы выхода из фоновых потоков?

+0

Вы не можете, afaik. Не могли бы вы сказать нам, что это за код? Я имею в виду, почему вы не можете просто изменить код? – manuell

ответ

0

Ну, выход из процесса (по крайней мере, на окнах) не очень хороший способ, поэтому, естественно, вы должны вернуть код ошибки в свою основную функцию, если вам может понравиться ERROR_SUCCESS (0).

Таким образом, если вы считаете, что выход больше похож на принудительный выход по сравнению с тем, что вы обычно должны делать, я могу только предположить, что он вызывает ExitProcess (0) под капотом, который, как вы можете прочитать в документах для ExitProcess делает то, что он говорит, немедленно выходит из процесса без сигналов snding или ждет чего-либо (например, отложенные операции), поэтому лучше всего использовать загрузку DLL и создать aa поддельный файл kernel32.dll, где вы блокируете exitprocess или любой другой выход () на самом деле вызывает или делает все в памяти, как заполнение вызова для выхода с помощью nop, поэтому ничего не делает.

Я могу только предположить, что вы используете чужой код, так что вы не можете его прокомментировать. В этом случае вы можете попробовать некоторые вспомогательные библиотеки для отладки, которые позволят вам использовать функции отладчика, такие как точки останова, и просто пропустите выход, если он не идет из основного потока.

Смежные вопросы