Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
sera0
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 91
1

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

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

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

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

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

Описатель inline
Описатель inline должен располагаться только в прототипе или определении...

Вызывть метод одного потока из другого потока
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : ...

Когда стоит использовать класс, а когда лучше обойтись без них?
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует...

Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
1)Любезные,скажите когда надо исп. списки инициализации, а когда можно заменить...

Когда нужно использовать &ссылки ,а когда *указатели?
Желательно с примерами

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

С уважением Дмитрий.
VDA
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ов и других объектов для синхронизации потоков.
0
VDA
18.11.2010, 14:22 5
Таких ситуаций надо избегать, есть ряд функций конечно(сразу не вспомню ибо не юзаю их), но это криво и никто так не делает. Код должен работать так, чтобы описатели закрывались без всяких проверок позднее.
Советую писать оберточные классы для обьектов ядра. Где в деструкторе эти обьекты закрываются.
Очень полезен скажем такой оберточной класс для критической секции, в конструкторе входим в нее, в деструкторе выходим, и никаких dead locks.


С уважением Дмитрий.
VDA
18.11.2010, 14:24 6
Очень полезен будет для тебя bound checker, он покажет все незакрытые handles, и утечки памяти. Поставь его (он интегрируется в VS)
18.11.2010, 14:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2010, 14:24

Когда запускаю и ввожу параметры, то, в момент когда программа должна выполнять действие, пишет ошибку
Недавно начали изучать c++. так как в школе не было программирования (преподу...

Перестало выводить, когда задание списков перевел в конструкторы, когда были просто функции выводило нормально.
Не могу понять почему не выводит список на экран Перестало выводить, когда...

Записать условия когда является истинным , когда:
Записать условия когда является истинным , когда: целое N кратно четырем и не...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru