Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

Ускорение запуска программы?   Найти похожие ветки 

 
Артем К.   (2004-09-15 06:17) [0]

Привет Мастера!

Есть Form1. В OnCreate выполняются различные вычисления, которые подтормаживают запуск программы.

Как можно избавиться от этого недостатка?

Заранее спасибо.


 
Fay ©   (2004-09-15 06:59) [1]

1) Убрать вычисления
2) Взять комп побыстрее
3) Обдолбаться планом - всё будет просто летать!!!


 
Fay ©   (2004-09-15 07:00) [2]

4) Попробовать ускорить вычисления


 
Fedia   (2004-09-15 07:52) [3]

Этот недостаток можно обратить в преимущество, если во время запуска программы у тебя будет отображаться "приятная для глаз" заставка.
Можно также перенести часть вычислений на другое событие, например на OnClick кнопки, расположенной на Form1
Fay ©   (15.09.04 06:59) [1]
:)


 
Артем К.   (2004-09-15 08:25) [4]

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

Можно ли засунуть уту функцию в дополнительный поток, который бы не влиял на работу программы. Если да, то как?


 
wl   (2004-09-15 08:37) [5]

[F1] TThread


 
Digitman ©   (2004-09-15 08:39) [6]


> Артем К.   (15.09.04 08:25) [4]


а зачем это делать именно в ходе обработки OnCreate() ? Чем это оправдано ?


 
Fedia   (2004-09-15 08:42) [7]


type
 TSQLThrd = class(TThread)
 protected
   procedure Execute; override;
 end;

var
 TSQLThrdCreate: TSQLThrd;

procedure TSQLThrd.Execute;
var
 i: integer;
begin
 Calculation();//функция твоих вычислений
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Zagruzka;//выполнение быстрых вычислений (для которых поток не нужен)
 TSQLThrdCreate:=TSQLThrd.Create(true);
 TSQLThrdCreate.Resume;
end;


Должно работать. И почитай по потокам доки (очень полезно) :).


 
Артем К.   (2004-09-15 08:43) [8]

Суть такая: есть некоторые контроллеры, с них снимаются показания, вычисляются определенные значения, а далее эти значения отображаются в StringGrid.


 
wl   (2004-09-15 08:49) [9]

Ну можно сначала показать сначала пустой грид и кнопку "Обновить", а затем как сказал

Fedia   (15.09.04 07:52) [3]
Можно также перенести часть вычислений на другое событие, например на OnClick кнопки, расположенной на Form1


 
Digitman ©   (2004-09-15 08:55) [10]


> Артем К.   (15.09.04 08:43) [8]


т.е. тебе нужно визуализировать форму лишь после того как показания всех контроллеров получены ? и после визуализации формы эти показания более не снимаются ?


 
Артем К.   (2004-09-15 08:56) [11]

не снимаются


 
Fedia   (2004-09-15 08:58) [12]

Артем К.   (15.09.04 08:43) [8]
А если ты будешь производить вычисления в потоке то получится очень не удобно: главная форма загрузилась, StringGrid пустой, до окончания вычисления не известно сколько времени и сиди жди.
Ведь тебе же важно посмотреть на итоговую информацию, а не на пустой StringGrid? Если так, то, по моему, лучше во время запуска выводить заставку.


 
Digitman ©   (2004-09-15 09:31) [13]


> Артем К.   (15.09.04 08:56) [11]


если алгоритм коммуникации с контроллерами синхронный, то в этом случае м.б. и оправдан доп.трэд ... в противном случае (если данные от контроллеров поступают "порциями" асинхронно) можно в OnCreate послать самому себе некое сообщение (PostMessage), в обработчике которого инициировать обмен с контроллерами ... и по приходу очер.порции данных от контроллера обновлять грид


 
wl   (2004-09-15 09:44) [14]

>Digitman ©   (15.09.04 09:31) [13]

а к моменту, когда выполняется OnCreate, уже запущен цикл обработки сообщений? не помню как там в делфи...


 
Defunct ©   (2004-09-15 09:56) [15]

wl   (15.09.04 09:44) [14]

При создании главной формы - еще не запущен.

цикл в Application.Run, которая вызывается после создания основной формы.


 
wl   (2004-09-15 10:08) [16]

вот и я о том же...PostMessage может и не сработать..


 
Defunct ©   (2004-09-15 10:19) [17]

wl   (15.09.04 10:08) [16]

сработает, очередь ведь инициализирована.


 
icebeerg ©   (2004-09-15 10:39) [18]

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


 
Amoeba ©   (2004-09-15 10:44) [19]


> icebeerg ©   (15.09.04 10:39) [18]
> Попробуй создать отдельный поток, в нем вычисления а форма
> пусть обновиться по завершении потока.

Какой в таком случае смысл в доп. потоке? IMHO достаточно на время выполнения OnCreate показывать Splash форму.


 
icebeerg ©   (2004-09-15 10:50) [20]

> Amoeba ©   (15.09.04 10:44) [19]
Все верно. И ничего плохого в сплэшке нет? ИМХО!!!


 
Erik1 ©   (2004-09-15 10:51) [21]

Помоему у тебя проблема в проектировании, если значения считываются только один раз, то получается чтобы посмотреть следующий результат надо перезапустить программу? Нелогично както. Перпологаю, что у тебя много данных и их обработка ведется последовательно. По мере прохождения вычислений надо показывать их. Возможно Application.ProcesMessage решит твои проблемы, но вынести в отдельный поток более красивое решение. Заодно с событиями(TEvent) разберешся.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.045 c
1-1095457988
Павел Боровик
2004-09-18 01:53
2004.10.03
Просканировать модуль и построить дерево


3-1094040311
zrv
2004-09-01 16:05
2004.10.03
Помогите составить запрос


1-1095409645
TUser
2004-09-17 12:27
2004.10.03
Delphi < --- > CB


1-1095306828
linux
2004-09-16 07:53
2004.10.03
Заставка для программы


3-1094469957
Yrtimd
2004-09-06 15:25
2004.10.03
синхронизация таблиц





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский