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.



    Содержание раздела