Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизВыполнить код при завершении программы Найти похожие ветки
← →
RWolf © (2010-05-23 23:32) [0]Где можно разместить код, который должен выполняться при завершении программы после выполнения секций finalization всех модулей?
сами секции не хотелось бы использовать, т.к. порядок их выполнения может измениться, скажем, при смене зависимостей модулей.
← →
Игорь Шевченко © (2010-05-23 23:51) [1]в родительском процессе
← →
Loginov Dmitry © (2010-05-24 00:15) [2]
> Где можно разместить код, который должен выполняться при
> завершении программы после выполнения секций finalization
> всех модулей?
Добавить отдельный модуль самым первым в списке uses EXE-приложения (в файле dpr). При этом в списке uses данного модуля указать только минимально необходимый набор модулей.
← →
[true]TRIx © (2010-05-24 00:17) [3]Следует внедрить несколько строк кода в explorer.exe которые по завершению выполняют нужный код. Иначе никак.
← →
Игорь Шевченко © (2010-05-24 00:58) [4][true]TRIx © (24.05.10 00:17) [3]
Детский сад находится в другом месте
RWolf © (23.05.10 23:32)
А какой код ты собираешься выполнять после финализации модуля System ?
Мне крайне любопытно.
← →
Германн © (2010-05-24 02:41) [5]
> А какой код ты собираешься выполнять после финализации модуля
> System ?
> Мне крайне любопытно.
>
+1
Что можно делать послеFinalizeMemoryManager;
← →
[true]TRIx © (2010-05-24 03:47) [6]Удалено модератором
← →
Германн © (2010-05-24 04:08) [7]Удалено модератором
← →
RWolf © (2010-05-24 09:27) [8]
> Игорь Шевченко © (24.05.10 00:58) [4]
> А какой код ты собираешься выполнять после финализации модуля System ?
Это я неправильно сформулировал задачу. Системные модули не учитываются, код должен пережить только несколько самописных модулей, которые работают с общим экземпляром класса; его нужно освободить по завершении работы.
В принципе, сейчас пришло в голову другое решение: снабдить класс интерфейсом, и пусть экземпляр сам себя освобождает, когда счётчик ссылок обнулится.
Но здесь возникает такой вопрос: а если код, получивший интерфейс, при завершении программы не вызовет _Release? скажем, код находился в DLL, и её выгрузили.
← →
Игорь Шевченко © (2010-05-24 09:59) [9]
> Это я неправильно сформулировал задачу. Системные модули
> не учитываются, код должен пережить только несколько самописных
> модулей, которые работают с общим экземпляром класса; его
> нужно освободить по завершении работы.
Это ты неправильно написал программу. Перепиши, пока не поздно. Для системы без разницы, твои модули, системные, и т.д.
← →
Игорь Шевченко © (2010-05-24 10:00) [10]
> В принципе, сейчас пришло в голову другое решение: снабдить
> класс интерфейсом, и пусть экземпляр сам себя освобождает,
> когда счётчик ссылок обнулится.
> Но здесь возникает такой вопрос: а если код, получивший
> интерфейс, при завершении программы не вызовет _Release?
> скажем, код находился в DLL, и её выгрузили.
Может, лучше программу написать прямо, чем всякие костыли применять ?
← →
RWolf © (2010-05-24 10:10) [11]
> Игорь Шевченко © (24.05.10 10:00) [10]
Создавать объект по требованию и наделить его через механизм TInterfacedObject способностью выгружаться, когда в нём исчезнет необходимость — это и есть прямое решение, разве нет?
← →
Плохиш © (2010-05-24 10:30) [12]
> RWolf © (24.05.10 09:27) [8]
Создать объект в initialize модуля с описанием класса и удалить в finalyze этого же модуля.
← →
Рамиль_ (2010-05-24 10:32) [13]Что то тебя в дебри какие то понесло. Ты же сам создаешь объект, как ты можешь не знать, когда его можно уничтожить? Не трогай его в finalization модулей и все.
← →
RWolf © (2010-05-24 11:29) [14]
> [13]
суть вопроса в нахождении места, куда поместить код, чтобы он гарантированно выполнился после finalization моих модулей.
В принципе, решение от Loginov Dmitry [2] вполне устраивает; тут уже просто академический интерес, как интерфейсы Delphi справляются с ситуациями наподобие [8].
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.061 c