Кто несет ответственность за вызов CloseHandle () для дескриптора потока

У меня есть класс Class в котором есть свойство участника HANDLE handle в поток (мы можем предположить, что он установлен в NULL в таком случае) . в какой-то момент, метод в Class отправляет один из своих собственных методов Class::threaded() (используя другую функцию, которая является внешней по отношению к самому классу, но здесь это не имеет значения) CreateThread(), Вызывающий поток может затем перейти к другой функции за пределами Class,

Как CloseHandle() должен быть вызван для HANDLE вернулся из CreateThread() Мне было интересно Class::threaded() как раз перед возвращением было бы достойным решением.

4

Решение

Два основных способа борьбы с потоком. Обычно вас интересует, когда поток завершается, вам нужно держать ручку вокруг, чтобы вы могли узнать. И, конечно, вы закроете его после того, как обнаружите завершение. Или вам все равно, стиль «забей и забудь», или у вас есть дополнительные объекты синхронизации, чтобы сигнализировать, что функция потока завершена, и / или вы просите ее выйти. В этом случае вы просто закрываете ручку, как только запускаете ее.

Имейте в виду, что это не необходимо держать ручку открытой, чтобы поддерживать поток в случае, если это является источником путаницы.

13

Другие решения

Вы получаете дескриптор потока, чтобы вы могли управлять им. Если в этом нет необходимости, вы можете позвонить CloseHandle сразу.

Закрытие HANDLE не будет завершать поток, поэтому безопасно закрыть его, если ничего из потока не представляет для вас интереса.

5

Вы можете закрыть его, как только вы его используете. Закрытие не влияет на поток. (Дескриптор ссылки подсчитывается ОС.)

4
По вопросам рекламы [email protected]