Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2011, 22:54   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Действия после полной инициализации программы.

Доброго времени суток!

Раньше проблемы не создавало, то что в OnCreate формы стоит загрузка настроек и запуск долгих операций.

Теперь это очень сильно колышит меня.

Вопрос:
Как производить действия только после ПОЛНОЙ инициализации приложения(создание всех форм и т.д.)?
Человек_Борща вне форума Ответить с цитированием
Старый 25.11.2011, 23:04   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

А что если открыть исходный код (*.dpr) и писать там:
Код:
program Project1;

uses
  Forms, Dialogs,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);

  // После создания всех форм
  ShowMessage('Пиши сюда');

  Application.Run;
end.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 25.11.2011, 23:23   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Как, например, дельфи 7-ая загружается - сначала заставочка, проходит инициализация, а потом основное окно вываливается. Что мешает на фоне созданного, но не видимого основного окна сделать заставку, инициалацию, грохнуть заставку и активизировать основное окно?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.11.2011, 23:43   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Нет нет, это не то.

Запускается моя программа в OnCreate сработывает инициализация кучи классов.
Затем запуск в работу некоторых из них. В итоге окна созданы ещё не все и система получает двойную, а то и тройную нагрузку.

Смотрю в сторону DataModule. Может его как-то ко всему этому прикрутить?
Человек_Борща вне форума Ответить с цитированием
Старый 26.11.2011, 00:01   #5
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

событие OnShow главной формы устраивает?

если и OnShow не устраивает, то альтернативный вариант: в OnShow запустить таймер на 200-250 мс, и в этом таймере всё сделать, когда сработает таймер программа будет гарантировано инициализирована
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 26.11.2011, 00:25   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если уж вы сразу создаете все формы, то в посте 2 вам и дали наводку - в dpr создаете все формы и DataModule, если есть. Потом перед Application.Run вызываете Public-метод главной формы или DataModule и делаете в нем настройки. Заставка по желанию, с ней симпатичней, если инициализация затягивается
Цитата:
система получает двойную, а то и тройную нагрузку
Это как, 80% загрузки процессра вместо 20-30%? Не вижу проблемы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.11.2011 в 00:33.
Аватар вне форума Ответить с цитированием
Старый 26.11.2011, 00:40   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Это как, 80% загрузки процессра вместо 20-30%? Не вижу проблемы
Как минимум не хилые тормоза когда программа в автозапуске у юзера.
Человек_Борща вне форума Ответить с цитированием
Старый 26.11.2011, 00:46   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если форм много, какой смысл их создавать в dpr? Почему бы не создавать в dpr только главную, а остальные при необходимости обращения к ним. Вышли из формы - удаляйте. Зачем их в памяти созданные держать? Вот и момент снижения ресурсоемкости в момент загрузки, если это актуально. Особенно это модальных форм касается
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.11.2011 в 00:49.
Аватар вне форума Ответить с цитированием
Старый 26.11.2011, 13:35   #9
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

А может быть у Вас изначально неверная архитектура приложения? Я например сделал бы так:
1. Вынес все глобальные классовые переменные в общий модуль, например UGlobal.pas, подключил бы его к проекту.
2. В событии OnCreate главной формы создавал бы поток, который и инициализировал бы все ваши классы в фоновом режиме, а на главной форме было бы сообщение типа "инициализация данных...пожалуйста, подождите".
3. В событии OnTerminate этого потока написал бы код, который бы переводил главную форму или приложение в целом в рабочее состояние готовности.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 26.11.2011, 15:00   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Возможно и архитектура.

НО не думаю, инициализация классов проходит быстро.
А вот запуск некоторых в работу, подвешивает программу.

Попробую вариант с потоком.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехватить действия чужой программы 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