Завершение и прекращение выполнения процесса

Существует четыре варианта завершения процесса:

- входная функция первичного потока возвращает управление;

- один из потоков процесса вызывает функцию ExitProcess;

- поток другого процесса вызывает функцию TerminateProcess;

- все потоки процесса завершаются «по своей воле».

Рассмотрим каждый из перечисленных вариантов.

Возврат управления входной функцией первичного потока

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

Использование функции ExitProcess

Процесс завершается, когда один из его потоков вызывает ExitProcess:

VOID ExitProcess(UINT fuExitCode);

Эта функция завершает процесс и все его потоки, заносит в параметр fuExitCode код завершения процесса. Возвращаемого значения у ExitProcess нет, так как результат ее действия - завершение процесса. Вызов ExitProcess приводит к уничтожению процесса или потока, когда выполнение функции еще не завершилось.

Использование функции TerminateProcess

Вызов функции TerminateProcess завершает процесс:

BOOL TerminateProcess(HANDLE hProcoss, UINT fuExitCode);

Особенность функции ExitProcess в том, что она может быть вызвана из любой потока произвольного процесса. Параметр hProcess идентифицирует описатель завершаемого процесса, а в параметре fuExitCode возвращается код завершения процесса.

Использовать TerminateProcess следует в случае, если иным способом завершить процесс не удается. Процесс не получает абсолютно никаких уведомлений о том, что он завершается, и приложение не может выполнить освобождение используемых ресурсов.

Все потоки процесса завершаются

Может возникнуть ситуации, когда все потоки процесса завершены. Операционная система, обнаружив, что в процессе не исполняется ни один поток, немедленно завершает его. При этом код завершения процесса приравнивается коду завершения последнего потока.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: