У меня есть класс Class
в котором есть свойство участника HANDLE handle
в поток (мы можем предположить, что он установлен в NULL
в таком случае) . в какой-то момент, метод в Class
отправляет один из своих собственных методов Class::threaded()
(используя другую функцию, которая является внешней по отношению к самому классу, но здесь это не имеет значения) CreateThread()
, Вызывающий поток может затем перейти к другой функции за пределами Class
,
Как CloseHandle()
должен быть вызван для HANDLE
вернулся из CreateThread()
Мне было интересно Class::threaded()
как раз перед возвращением было бы достойным решением.
Два основных способа борьбы с потоком. Обычно вас интересует, когда поток завершается, вам нужно держать ручку вокруг, чтобы вы могли узнать. И, конечно, вы закроете его после того, как обнаружите завершение. Или вам все равно, стиль «забей и забудь», или у вас есть дополнительные объекты синхронизации, чтобы сигнализировать, что функция потока завершена, и / или вы просите ее выйти. В этом случае вы просто закрываете ручку, как только запускаете ее.
Имейте в виду, что это не необходимо держать ручку открытой, чтобы поддерживать поток в случае, если это является источником путаницы.
Вы получаете дескриптор потока, чтобы вы могли управлять им. Если в этом нет необходимости, вы можете позвонить CloseHandle
сразу.
Закрытие HANDLE
не будет завершать поток, поэтому безопасно закрыть его, если ничего из потока не представляет для вас интереса.
Вы можете закрыть его, как только вы его используете. Закрытие не влияет на поток. (Дескриптор ссылки подсчитывается ОС.)