|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.11.2011, 22:54 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Действия после полной инициализации программы.
Доброго времени суток!
Раньше проблемы не создавало, то что в OnCreate формы стоит загрузка настроек и запуск долгих операций. Теперь это очень сильно колышит меня. Вопрос: Как производить действия только после ПОЛНОЙ инициализации приложения(создание всех форм и т.д.)? |
25.11.2011, 23:04 | #2 |
Форумчанин
Регистрация: 26.07.2009
Сообщений: 489
|
А что если открыть исходный код (*.dpr) и писать там:
Код:
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
|
25.11.2011, 23:23 | #3 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Как, например, дельфи 7-ая загружается - сначала заставочка, проходит инициализация, а потом основное окно вываливается. Что мешает на фоне созданного, но не видимого основного окна сделать заставку, инициалацию, грохнуть заставку и активизировать основное окно?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
25.11.2011, 23:43 | #4 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Нет нет, это не то.
Запускается моя программа в OnCreate сработывает инициализация кучи классов. Затем запуск в работу некоторых из них. В итоге окна созданы ещё не все и система получает двойную, а то и тройную нагрузку. Смотрю в сторону DataModule. Может его как-то ко всему этому прикрутить? |
26.11.2011, 00:01 | #5 |
Форумчанин
Регистрация: 05.10.2011
Сообщений: 368
|
событие OnShow главной формы устраивает?
если и OnShow не устраивает, то альтернативный вариант: в OnShow запустить таймер на 200-250 мс, и в этом таймере всё сделать, когда сработает таймер программа будет гарантировано инициализирована
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
|
26.11.2011, 00:25 | #6 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если уж вы сразу создаете все формы, то в посте 2 вам и дали наводку - в dpr создаете все формы и DataModule, если есть. Потом перед Application.Run вызываете Public-метод главной формы или DataModule и делаете в нем настройки. Заставка по желанию, с ней симпатичней, если инициализация затягивается
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 26.11.2011 в 00:33. |
|
26.11.2011, 00:40 | #7 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
|
|
26.11.2011, 00:46 | #8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Если форм много, какой смысл их создавать в dpr? Почему бы не создавать в dpr только главную, а остальные при необходимости обращения к ним. Вышли из формы - удаляйте. Зачем их в памяти созданные держать? Вот и момент снижения ресурсоемкости в момент загрузки, если это актуально. Особенно это модальных форм касается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 26.11.2011 в 00:49. |
26.11.2011, 13:35 | #9 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
А может быть у Вас изначально неверная архитектура приложения? Я например сделал бы так:
1. Вынес все глобальные классовые переменные в общий модуль, например UGlobal.pas, подключил бы его к проекту. 2. В событии OnCreate главной формы создавал бы поток, который и инициализировал бы все ваши классы в фоновом режиме, а на главной форме было бы сообщение типа "инициализация данных...пожалуйста, подождите". 3. В событии OnTerminate этого потока написал бы код, который бы переводил главную форму или приложение в целом в рабочее состояние готовности.
"ковыряю изнутри" (с)
|
26.11.2011, 15:00 | #10 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Возможно и архитектура.
НО не думаю, инициализация классов проходит быстро. А вот запуск некоторых в работу, подвешивает программу. Попробую вариант с потоком. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перехватить действия чужой программы | Ghost of Night | Общие вопросы Delphi | 5 | 16.11.2010 20:04 |
консоль закрывается сразу после выполнения последнего действия | F4RR3LL | Общие вопросы C/C++ | 2 | 14.09.2008 20:43 |
Выполнить действия после отображения формы | zhefran | Общие вопросы Delphi | 15 | 14.08.2008 16:50 |
Срок действия программы | fluxion | Win Api | 4 | 23.01.2008 20:25 |
действия при загрузке программы | WhoThenNow | Общие вопросы Delphi | 2 | 19.09.2007 21:42 |