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

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

Восстановить пароль Регистрация
 
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
05.11.2010, 15:02     Когда закрывать описатель созданного потока? #1
Можно ли после создания потока сразу же закрывать его описатель:

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

?
И вообще, когда закрывать описатель созданного потока, если неизвестно заранее когда он прекратит работу?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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     Когда закрывать описатель созданного потока?
Ответ Создать тему
Опции темы

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