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

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

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

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

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

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

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

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

Описатель inline - C++
Описатель inline должен располагаться только в прототипе или определении функции или и там, и там?

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

Когда использовать WinAPI, а когда функции языка? - C++
Не совсем понимаю, когда нужно использовать WinAPI в приложении, а когда функционал самого ЯП (С/С++). Для той же работы с файлами...

Когда используется * перед указателями, а когда нет? - C++
Вообщем я запутался и не пойму, когда нужно перед указателем ставить "*", а когда нет. Как я понял, "*" ставится перед указателем,...

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

Зачем нужно закрывать файл? - C++
Зачем надо в конце выполнения программы использовать такую команду? stream.close();

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


С уважением Дмитрий.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2010, 14:24     Когда закрывать описатель созданного потока?
Еще ссылки по теме:

Не закрывать консоль после выполнения программы - C++
Как сделать чтобы после выполнения програмы блэкскрин не закрывался?

Зачем закрывать поток при записи в файл? - C++
Надеюсь, я правильно задал вопрос темы. Просто плохо в этом разбираюсь. Задавал разные вопросы про запись в txt файл у различных людей...

Когда оператор должен быть обязательно членом класса, и когда он обязательно не принадлежит классу? - C++
Нужно узнать случаи, когда оператор функция должна быть обязательно членом класса и случаи, когда оператор- функция обязательно не...

Возврат созданного в функции массива - C++
Верна ли следующая конструкция? void LoadArray(float* array, int & count) { int fcount = 30;//данная цифра подсчитывается...


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

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

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