Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выполнить код при завершении программы


RWolf ©   (2010-05-23 23:32:00) 

Где можно разместить код, который должен выполняться при завершении программы после выполнения секций finalization всех модулей?
сами секции не хотелось бы использовать, т.к. порядок их выполнения может измениться, скажем, при смене зависимостей модулей.


RWolf   (2010-05-24 11:29:00) [1]


> [13]

суть вопроса в нахождении места, куда поместить код, чтобы он гарантированно выполнился после finalization моих модулей.
В принципе, решение от Loginov Dmitry[2] вполне устраивает; тут уже просто академический интерес, как интерфейсы Delphi справляются с ситуациями наподобие [8].


Рамиль_   (2010-05-24 10:32:00) [2]

Что то тебя в дебри какие то понесло. Ты же сам создаешь объект, как ты можешь не знать, когда его можно уничтожить? Не трогай его в finalization модулей и все.


Плохиш   (2010-05-24 10:30:00) [3]


> RWolf ©   (24.05.10 09:27) [8]

Создать объект в initialize модуля с описанием класса и удалить в finalyze этого же модуля.


RWolf   (2010-05-24 10:10:00) [4]


> Игорь Шевченко ©   (24.05.10 10:00) [10]

Создавать объект по требованию и наделить его через механизм TInterfacedObject способностью выгружаться, когда в нём исчезнет необходимость — это и есть прямое решение, разве нет?


Игорь Шевченко   (2010-05-24 10:00:00) [5]


> В принципе, сейчас пришло в голову другое решение: снабдить
> класс интерфейсом, и пусть экземпляр сам себя освобождает,
>  когда счётчик ссылок обнулится.
> Но здесь возникает такой вопрос: а если код, получивший
> интерфейс, при завершении программы не вызовет _Release?
>  скажем, код находился в DLL, и её выгрузили.


Может, лучше программу написать прямо, чем всякие костыли применять ?


Игорь Шевченко   (2010-05-24 09:59:00) [6]


> Это я неправильно сформулировал задачу. Системные модули
> не учитываются, код должен пережить только несколько самописных
> модулей, которые работают с общим экземпляром класса; его
> нужно освободить по завершении работы.


Это ты неправильно написал программу. Перепиши, пока не поздно. Для системы без разницы, твои модули, системные, и т.д.


RWolf   (2010-05-24 09:27:00) [7]


> Игорь Шевченко ©   (24.05.10 00:58) [4]
> А какой код ты собираешься выполнять после финализации модуля System ?

Это я неправильно сформулировал задачу. Системные модули не учитываются, код должен пережить только несколько самописных модулей, которые работают с общим экземпляром класса; его нужно освободить по завершении работы.

В принципе, сейчас пришло в голову другое решение: снабдить класс интерфейсом, и пусть экземпляр сам себя освобождает, когда счётчик ссылок обнулится.
Но здесь возникает такой вопрос: а если код, получивший интерфейс, при завершении программы не вызовет _Release? скажем, код находился в DLL, и её выгрузили.


Германн   (2010-05-24 04:08:00) [8]

Удалено модератором


[true]TRIx   (2010-05-24 03:47:00) [9]

Удалено модератором


Германн   (2010-05-24 02:41:00) [10]


> А какой код ты собираешься выполнять после финализации модуля
> System ?
> Мне крайне любопытно.
>

+1
Что можно делать после
FinalizeMemoryManager;


Игорь Шевченко   (2010-05-24 00:58:00) [11]

[true]TRIx ©   (24.05.10 00:17) [3]

Детский сад находится в другом месте

RWolf ©   (23.05.10 23:32)  

А какой код ты собираешься выполнять после финализации модуля System ?
Мне крайне любопытно.


[true]TRIx   (2010-05-24 00:17:00) [12]

Следует внедрить несколько строк кода в explorer.exe которые по завершению выполняют нужный код. Иначе никак.


Loginov Dmitry   (2010-05-24 00:15:00) [13]


> Где можно разместить код, который должен выполняться при
> завершении программы после выполнения секций finalization
> всех модулей?


Добавить отдельный модуль самым первым в списке usesEXE-приложения (в файле dpr). При этом в списке usesданного модуля указать только минимально необходимый набор модулей.


Игорь Шевченко   (2010-05-23 23:51:00) [14]

в родительском процессе


Наверх

Титульная страница Поиск, карта сайта Написать письмо