Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2010, 00:40   #1
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию Потоки. FreeOnTerminate или где уничтожать созданные объекты.

Допустим в потоке я создаю TBitmap... Уничто жать я его планировал так:
Код:
destructor Free;

...

destructor myThread.Free;
begin
   bmp.free;
   inherited Free;
end;

...

myThread.FreeOnTerminate:=true;
myThread.Terminate;
Думал, что FreeOnTerminate означает то, что по вызову Terminate будет вызван Free... Но я был разочарован. А если писать просто free, то сегодня у меня вылетала ошибка: Неверный дескриптор.
TwiX вне форума Ответить с цитированием
Старый 10.03.2010, 00:52   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Free это не деструктор а процедура
Destroy деструктор его перегружайте(слово overload помним)
сколько помню сбоев не было у меня
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.03.2010, 02:55   #3
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Ааа... Вот я тупил... Я не мог вспомнить дестрой) Думал "Create-Free... Чего-то не то" =)
А почему всё-таки Free не срабатывает, когда Terminate использую?
И почему Overload, а не Override? Нам же старая версия конструктора не нужна
TwiX вне форума Ответить с цитированием
Старый 10.03.2010, 03:04   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да, override перепутал, я давно не Делфил=)

вызывется метод Free от TThread а не от вашего класса.
ибо даже в вашем случае Override не поможет, так как нет такого деструктора в TThread
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 10.03.2010 в 03:14.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Надо ли самим уничтожать память в объекте TTreeView ? juan666777 Общие вопросы Delphi 6 08.02.2010 01:00
Где найти кряк или серийник? Sabber Свободное общение 1 26.10.2008 16:22
Объекты или... Lich Общие вопросы Delphi 1 03.06.2008 23:22
Потоки и объекты OrdJONY Общие вопросы Delphi 3 28.11.2007 21:59
Как сделать чтобы динамически созданные объекты оставались после закрытия формы? AHAPXUCT2007 Общие вопросы Delphi 7 28.09.2007 08:46