Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

?
И вообще, когда закрывать описатель созданного потока, если неизвестно заранее когда он прекратит работу?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2010, 15:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Когда закрывать описатель созданного потока? (C++):

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

Вызывть метод одного потока из другого потока - C++
Здравствуйте, подскажите пожалуйста, как можно реализовать такую штуку : есть один поток(1), который вызывает метод у обьекта, этот...

Когда стоит использовать класс, а когда лучше обойтись без них? - C++
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать несколько классов? Вот, например. Программа...

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

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

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

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++
Не могу понять почему не выводит список на экран Перестало выводить, когда задание списков перевел в конструкторы, когда были просто...

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

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

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


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

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

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