Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Действие по закрытию приложения

11K
27 ноября 2008 года
Babandr
76 / / 05.05.2008
проблема в следующем. при запуске программы надо создать несколько объектов, при закрытии - уничтожить...эти объекты никак не должны быть связаны с главной формой приложения (впрочем, с другими окнами тоже) и поэтому создавать и уничтожать их в ее обработчиках, конструкторах или методах я не хочу.

Создание я сделал просто: определил отдельный модуль, в нем создал функцию, которую вызываю в WinMain перед
Application->Initialize() в файле Project1.cpp
вот с удалением проблемы...не соображу как в WinMain отловить сообщение wm_quit, а события типа TApplication::OnExit или чего-нибудь подобного я не нахожу...
Подскажите, пожалуйста. Заранее благодарен.
246
27 ноября 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: Babandr
проблема в следующем. при запуске программы надо создать несколько объектов, при закрытии - уничтожить...эти объекты никак не должны быть связаны с главной формой приложения (впрочем, с другими окнами тоже) и поэтому создавать и уничтожать их в ее обработчиках, конструкторах или методах я не хочу.

Создание я сделал просто: определил отдельный модуль, в нем создал функцию, которую вызываю в WinMain перед
Application->Initialize() в файле Project1.cpp
вот с удалением проблемы...не соображу как в WinMain отловить сообщение wm_quit, а события типа TApplication::OnExit или чего-нибудь подобного я не нахожу...
Подскажите, пожалуйста. Заранее благодарен.


1. ну если твои объекты не должны быть связаны с окном, то ты никак не поймаешь сообщения с префиксом WM_ - виндовс мессаже
2. просто удали их после Application->Run(); (можно продублировать в блоке catch)

240
27 ноября 2008 года
aks
2.5K / / 14.07.2006
Автор вобще слышал про такие вещи в C++ как конструкторы или деструкторы? =))
Или пускай живут на стеке и умирают при выходе из области видимости или пускай удаляются в деструкторе объекта который за них отвечает. )
11K
27 ноября 2008 года
Babandr
76 / / 05.05.2008
Цитата: GIZMO
1. ну если твои объекты не должны быть связаны с окном, то ты никак не поймаешь сообщения с префиксом WM_ - виндовс мессаже


ну да, это я глупость сказал.

Цитата: GIZMO
2. просто удали их после Application->Run(); (можно продублировать в блоке catch)


Не, не работает...:(

11K
27 ноября 2008 года
Babandr
76 / / 05.05.2008
Цитата: aks
Автор вобще слышал про такие вещи в C++ как конструкторы или деструкторы? =))
Или пускай живут на стеке и умирают при выходе из области видимости или пускай удаляются в деструкторе объекта который за них отвечает. )


Да, о конструкторах и деструкторах слышать приходилось...
Обсуждаемые объекты - что-то вроде глобальных переменных...
Объект, который за них отвечает - само приложение. Но как переопределить деструктор ТApplication(да и другие методы)?

14
27 ноября 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: Babandr
Не, не работает...:(


Как ты это определил? Код в студию!

240
27 ноября 2008 года
aks
2.5K / / 14.07.2006
Цитата: Babandr

Обсуждаемые объекты - что-то вроде глобальных переменных...


У глобальный объектов деструктор вызывается при завершении программы. Хотя глобальными все же делать нехорошо их.

11K
27 ноября 2008 года
Babandr
76 / / 05.05.2008
Так...видимо я изначально неправильно поставил вопрос.
Как выполнить какие-либо действия по окончании работы программы, не привязываясь к OnFormDestroy, OnFormClose и т.п.?
2.3K
27 ноября 2008 года
ART-CODE
134 / / 15.11.2004
выполнить какие-либо действия по окончании работы программы
- пишешь батник примерно такой...
 
Код:
start /wait /max iexplore.exe "C:\index.html"
copy C:\index.html c:\temp

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

а вот пример моей работы с моим-же глобальным обьектом, который ведет отладочные логи

Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{

   
Application->Initialize();

       
#ifdef debug_mode
STR_DEBUG=new  TDebugInterceptor();
#endif

  Application->CreateForm(__classid(TSDIAppForm), &SDIAppForm);
  Application->Run();

#ifdef debug_mode
STR_DEBUG->CloseDebugInterceptor();
delete STR_DEBUG;
#endif

    return 0;
}


а сам глобальный обьект - перехватчик обьявлен так:

 
Код:
extern __declspec(selectany)TDebugInterceptor * STR_DEBUG=NULL;
240
28 ноября 2008 года
aks
2.5K / / 14.07.2006
И все же я не понимаю вопроса. У тебя есть точка входа (функция main или другая если ее имя заменено в настройках проекта) в ней стоздаются объекты динамически или на стеке. Стековые удаляются сами по выходу из функции, динамические перед выходом из функции надо удалять вручную. Все остальные объекты соотвественно создаются в объектах созданных в main и в агрегированных в них объектах и так далее. Соответственно могут быть спокойно удаленны в их деструкторах. Наличие или остутствия GUI, цикла сообщений и т.п. на это вобще не влияет. Их может и не быть вовсе. ))
11K
28 ноября 2008 года
Babandr
76 / / 05.05.2008
Цитата: aks
Все остальные объекты соотвественно создаются в объектах созданных в main и в агрегированных в них объектах и так далее. Соответственно могут быть спокойно удаленны в их деструкторах. Наличие или остутствия GUI, цикла сообщений и т.п. на это вобще не влияет. Их может и не быть вовсе. ))



Хорошо, буду пробовать. Спасибо за участие.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог