Завершение работы потока

Поток исполняется до тех пор, пока не произойдет одно из нижеследующих событий:

Функция GetExitCodeThread возвращает значение состояния завершения потока. В то время как поток исполняет код, его состоянием завершения работы является STILL_ACTIVE. Когда поток заканчивает работу, он свое состояние завершения изменяет с STILL_ACTIVE на код выхода из потока. Код выхода является или значением, определяемым при вызове ExitThread, ExitProcess, TerminateThread или TerminateProcess, или значением, возвращенным функцией потока.

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

Если поток завершает свою работу при помощи ExitThread, система вызывает функцию точки входа каждой связанной динамически подключаемой библиотеки (DLL) со значением, указывающим, что поток отсоединяет от DLL (если Вы не вызываете функцию DisableThreadLibraryCalls). Если поток завершает свою работу при помощи ExitProcess, функции точки входа DLL вызываются однажды, чтобы указать, что процесс отсоединяется. Динамически подключаемые библиотеки (DLL) не уведомляются, когда поток завершает работу, если используются TerminateThread или TerminateProcess. Для получения дополнительной информации о DLL, см. главу Динамически подключаемые библиотеки.

Внимание!. Функции TerminateThread и TerminateProcess должны быть использованы только в экстремальных случаях, поскольку они не дают потокам возможности очиститься, не уведомляют связанные DLL и не освобождают начальный стек. Нижеследующие шаги обеспечивают лучшее решение проблемы:

  • Создать объект события, используя функцию CreateEvent.
  • Создать потоки.
  • Каждый поток отслеживает состояние события путем вызова функции WaitForSingleObject. Используйте интервал блокировки времени ожидания нуль.
  • Каждый поток самостоятельно завершает свою работу, когда событие устанавливается в сигнальное состояние (WaitForSingleObject возвращает значение WAIT_OBJECT_0).

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz