![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| thread |
|
|||
|
Unregistered |
Как корректно завершить поток, созданный beginthread, с освобождением всей памяти????
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
передать в поток только указатель на память ( с которым он и должен работать ) а перед завершением ( или после ) эту память удалить
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
незнаю правилно или нет я делал, но когда нужно было завершать делал:
в моей ситуации все было гладко. -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
не правильно -- ты память не освобождал ( а смысла последней строки я вообще не понимаю )
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
чтоб ждать окончания terminate, потому что без этого при дестрое класса в котором трэд использовался выскакивал аксесвилатион. незнаю что там неуспевало освобождаться или нет (с тредами не часто общался) но c этой строчкой все было нормально. ps. closeHandle я делал (это и есть освобождение?). -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
А если есть объект TThread, то если я запущу эту нить, а в методе execute буду использовать переменные, объявленные в private-секции, и в destroy - разрушать всё, что создал в create - то если я применю к такой нити TerminateThread, то память будет утеряна или нет?
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| thread |
|
|||
|
Unregistered |
должна быть утеряна.... потому как terminatethread:
1) функция асинхронная, т.е. она может его вообще не разрушить... поэтому надо проверять waitforsingleobject 2) terminatethread приводит к утечке памяти !!!! - это факт проверено личным опытом и так говорит microsoft. Поэтому я и задал этот вопрос |
|||
|
||||
| pascal |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 16.7.2003 Где: Россия - Уфа Репутация: нет Всего: 1 |
да, печально, но в моём случае terminatethread приводил к утечке 1 метра за раз, печально...
и самое главное действительно неисправимо... но разве не судьбы было хотябы в Win2003 это исправить? а когда прога доходит до 2 гегов, то винда отказывает в выделении памяти вызывая except и всё приложение вообще вылетает, так как даже для обработки except'а нужна память... |
|||
|
||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Хм... не обязательно, над этим и бъёмся же Но вот так, например: У нас есть массив на мегобайт памяти, мы его создаём в create TThread'а, а потом в execute мы долго что-то делаем с этим массивом, пишем в него, читаем... и тут происходит terminatethread... что поризошло? Выполнилось принудительное exit из метода (асинхронного) execute? потом выполнится обычный для TThread'а destroy? Если да, то утечки же можно избежать... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| pascal |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 16.7.2003 Где: Россия - Уфа Репутация: нет Всего: 1 |
ты не понял, утечка памяти у винды идёт, а не у проги... |
||||
|
|||||
| Illusion Dolphin |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Не понял... Ка это у винды? Если я не ошибаюсь, но в NTшных системах память под процессы как бы разделяется и коли я использую нить у себя в проге, то именно в моей програме будет утечка... если будет... -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
| pascal |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 16.7.2003 Где: Россия - Уфа Репутация: нет Всего: 1 |
перед использованием функции terminatethread надо запросить инфу о потоке и самим освободить память после выполнения terminatethread...
(из книги "Справочник по базовым функциям WinAPI") Добавлено @ 15:09
да, совершенно верно... |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |