Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
#1

Когда закрывать описатель созданного потока? - C++

05.11.2010, 15:02. Просмотров 822. Ответов 5
Метки нет (Все метки)

Можно ли после создания потока сразу же закрывать его описатель:

HANDLE hThread = (HANDLE)_beginthreadex(...);
CloseHandle(hThread);

?
И вообще, когда закрывать описатель созданного потока, если неизвестно заранее когда он прекратит работу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2010, 15:02     Когда закрывать описатель созданного потока?
Посмотрите здесь:

Перестало выводить, когда задание списков перевел в конструкторы, когда были просто функции выводило нормально. C++
Зачем закрывать поток при записи в файл? C++
C++ Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
Описатель inline C++
Записать условия когда является истинным , когда: C++
C++ Не закрывать консоль после выполнения программы
C++ Когда используется * перед указателями, а когда нет?
C++ Вызывть метод одного потока из другого потока
C++ Зачем нужно закрывать файл?
Когда использовать WinAPI, а когда функции языка? C++
C++ Когда оператор должен быть обязательно членом класса, и когда он обязательно не принадлежит классу?
C++ Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VDA
Сообщений: n/a
09.11.2010, 13:17     Когда закрывать описатель созданного потока? #2
Дождаться когда поток закончит работу можно с помощью
WaitForSingleObject( хендл потока, время )
После этого закрываешь хендл.
Для принудительного завершения потока использую шутдаун Event.
В потоке в основном цикле проверяй на него.

С уважением Дмитрий.
VDA
Сообщений: n/a
09.11.2010, 13:33     Когда закрывать описатель созданного потока? #3
PS:
Когда ты вызываешь СloseHandle() эта функция проверяет таблицу описателей принадлежащих этому процессу. Находит нужную запись, берет оттуда адрес обьекта ядра(потока) идет по этому адресу и уменьшает в этой структуре счетчик числа пользователей на еденицу.
Дальше система удаляет соотв. запись из таблицы описателей, и теперь никто в этом процессе не сможет доступится к этому объекту ядра.
Причем запись удаляется независимо оттого разрушен объект ядра или нет.
Сам объект удалится из памяти когда счетчик числа пользователей будет равен нулю.

С уважением Дмитрий.
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
17.11.2010, 12:32  [ТС]     Когда закрывать описатель созданного потока? #4
Спасибо, Дмитрий.

По ходу у меня появился еще один вопрос по этим самым описателям.
Как узнать в ходе работы программы (возможно, on break или есть такие функции), какие в данный момент у процесса 'висят' незакрытыми объекты ядра: описатели файлов, потоков, eventов и других объектов для синхронизации потоков.
VDA
Сообщений: n/a
18.11.2010, 14:22     Когда закрывать описатель созданного потока? #5
Таких ситуаций надо избегать, есть ряд функций конечно(сразу не вспомню ибо не юзаю их), но это криво и никто так не делает. Код должен работать так, чтобы описатели закрывались без всяких проверок позднее.
Советую писать оберточные классы для обьектов ядра. Где в деструкторе эти обьекты закрываются.
Очень полезен скажем такой оберточной класс для критической секции, в конструкторе входим в нее, в деструкторе выходим, и никаких dead locks.


С уважением Дмитрий.
VDA
Сообщений: n/a
18.11.2010, 14:24     Когда закрывать описатель созданного потока? #6
Очень полезен будет для тебя bound checker, он покажет все незакрытые handles, и утечки памяти. Поставь его (он интегрируется в VS)
Yandex
Объявления
18.11.2010, 14:24     Когда закрывать описатель созданного потока?
Ответ Создать тему
Опции темы

Текущее время: 00:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru