![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
MetalFan |
|
||||||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Как известно, простое освобождение памяти объекта посредством TObject.Free
делает невозможным дальнейшее получение статуса(Создан/Освобожден) переменной-объекта стандартными способами. т.е.
мне пришла мысль, что можно попытаться создать функцию, которая проверила бы реальное "положение дел". и вот что у меня получилось после "курения" функции SysFreeMem:
не уверен, что она 100% соответствует ожиданиям, но:
отрабатывает верно... правда если написать так:
то последняя проверка "соврет", видимо вновь созданный TStringList попадет ровно в то место, где был предыдущий... жду комментариев и дополнений от... всех сочувствующих) Это сообщение отредактировал(а) MetalFan - 9.10.2007, 18:44 -------------------- There are always someone smarter than you... |
||||||||
|
|||||||||
Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 51 |
У меня CheckIsFreed выдаёт False и после
lSL.Free; т.е. ведёт себя точно также как и assigned. Delphi 6(6.240 Update Pack 2) Добавлено через 1 минуту и 51 секунду Прочитал это, и не поверил сначала. Бросился проверять - оказывается правда. Как я паньше жил не зная этого ![]() Видно не зря у меня в коде повсюду freeandnil используется ![]() |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
Нда... MetalFan, к сожалению твоя функция не работает, как надо. D7
|
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
VICTAR, а хоть как-то работает? тестил под D2006
-------------------- There are always someone smarter than you... |
|||
|
||||
Ak47black |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: 1 Всего: 0 |
Гы! только что хотел спросить насчет
, а тут такая тема хорошая ![]() Теперь буду юзать
А всетаки для чего делали программеры Free? Если она работает как Destroy? У меня D7 - тоже Не работает. Это сообщение отредактировал(а) Ak47black - 9.10.2007, 19:38 |
||||
|
|||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
||||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
странно... наверное раньше менеджер памяти както по-другому работал -------------------- There are always someone smarter than you... |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 37 Всего: 80 |
||||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
MetalFan, очевидно, что данный код сильно привязан к версии и нет ни какой гарантии, что в будущем это также сохраниться. ИМХО freeandnil, самое грамотное решение этого вопроса.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
ужас... смортю код SysMemFree в сeмерке... а там goto
![]() Это сообщение отредактировал(а) MetalFan - 9.10.2007, 20:27 -------------------- There are always someone smarter than you... |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 16 Всего: 38 |
Удивлен? А я почему-то нет ![]() А если по теме - то FreeAndNil не всегда можно использовать, к сожалению. Например, если создается поток, в котором FreeOnTerminate = True... -------------------- ![]() |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
||||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
dumb, мысль в том, что если у потока FreeOnTerminate выставлено, то после окончания его работы и "самоуничтожения" довольно сложно определить его состояние без доп.телодвижений
-------------------- There are always someone smarter than you... |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
MetalFan, это я понимаю. я не понял, зачем вообще использовать free(с nil и без него), если ставишь этот флаг... вобщем туго мысль с утра течет...
![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
MetalFan, если идет определение состояния, но не нужно уничтожать его автоматом. Используется метод WaitFor, для ожидания завершения или состояние флага Terminated, для определения окончания работы, определили что Terminated = true, дождались полного завершения, потом уничтожили и занулили. Как я понимаю FreeOnTerminate ставят в случае когда время окончания не играет роли и важно только чтобы память была освобождена.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |