Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows


Что происходит при завершении потока


А происходит вот что.

  • Освобождаются все описатели User-объектов, принадлежавших потоку. В Win dows большинство объектов принадлежит процессу, содержащему поток, из которого они были созданы Сам поток владеет только двумя User-объектами, окнами и ловушками (hooks). Когда поток, создавший такие объекты, заверша ется, система уничтожает их автоматически. Прочие объекты разрушаются, только когда завершается владевший ими процесс.
  • Код завершения потока меняется со STILL_ACTIVE на код, переданный в функ цию ExitThread или TerminateTbread.
  • Объект ядра "поток" переводится в свободное состояние.
  • Если данный поток является последним активным потоком в процессе, завер шается и сам процесс.
  • Счетчик пользователей объекта ядра "поток" уменьшается на 1.

При завершении потока сопоставленный с ним объект ядра "поток* не освобож дается до тех пор, пока не будут закрыты все внешние ссылки на этот объект.

Когда поток завершился, толку от его описателя другим потокам в системе в об щем немного. Единственное, что они могут сделать, — вызвать функцию GetExitCode Thread, проверить, завершен ли поток, идентифицируемый описателем hThread, и, если да, определить его код завершения.

BOOL GetExitCodeThread( HANDLE hThread, PDWORD pdwExitCode);

Код завершения возвращается в переменной типа DWORD, на которую указывает pdwExitCode Если поток не завершен на момент вызова GetExitCodeThread, функция записывает в эту переменную идентификатор STILL_ACTIVE (0x103) При успешном вызове функция возвращает TRUE К использованию описателя для определения фак та завершения потока мы еще вернемся в главе 9.




Начало  Назад  Вперед



Книжный магазин