Темы на WindowsXP - PullRequest
       11

Темы на WindowsXP

2 голосов
/ 12 января 2010

Если есть дочерние потоки родительского потока, работающие в ОС Windows XP, завершает ли родительский поток также дочерний поток?

Ответы [ 4 ]

5 голосов
/ 12 января 2010

В терминах записанной информации нет понятия «родительский поток» в Windows. Нет даже понятия «родительский процесс» - Windows не записывает процесс создания, а только процесс, от которого унаследованы атрибуты и дескрипторы. Так что ответ - нет.

РЕДАКТИРОВАТЬ: пример должен прояснить: вы можете создать поток в другом процессе, а не только свой собственный. Очевидно, что этот поток не завершится, когда завершится ваш поток.

1 голос
/ 12 января 2010

Нет - потоки принадлежат процессу, а не другим потокам. Потоки не завершаются, если созданный ими поток завершается.

Темы заканчиваются, когда:

  • Функция потока завершается (либо нормально, либо через исключение).
  • Поток вызывает ExitThread или другую функцию, которая завершает поток.
  • Любой поток вызывает функцию TerminateThread с идентификатором рассматриваемого потока.
  • Процесс заканчивается.
0 голосов
/ 12 января 2010

Из описания MSDN функции API Windows CreateThread ():

"Объект потока остается в системе до тех пор, пока поток не завершится и все его дескрипторы не будут закрыты посредством вызова CloseHandle."

Мое понимание того, как работает CreateThread, заключается в том, что вы в основном запрашиваете Windows порождать поток и назначать указатель на функцию, которую вы хотите, чтобы поток вызывал. Когда процесс завершен, вы «вежливо» сообщаете Windows, что вам больше не нужен поток.

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

Что касается операционной системы, я согласен с "wj32", что на самом деле нет основного потока как такового, но я думаю, что сам поток приложений можно было бы концептуально рассматривать как "основной поток", при условии, что приложение соответствующим образом управляет распределением ресурсов потока.

0 голосов
/ 12 января 2010

Нет, если родительский поток не является основным потоком приложения.

...