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

Вниз

Окно ожидания в отдельном потоке   Найти похожие ветки 

 
Gu   (2010-11-14 20:24) [0]

Что требуется: есть прога, которая выполняет некие действия, которые могут длиться довольно долго, при этом сильно нагружая проц. Требуется перед началом этих действий создать окно, которое информирует пользователя об ожидании. На окне есть компонент гифаниматор, который отображает анимационный гиф. Если просто сделать окно_ожидания.show перед началом действий (а в конце .hide\close), то при выполнении происходят тормоза анимации.
Вот думаю, что хорошо бы чтобы оно показывалось в отдельном потоке.
Сделал так:

отключил автосоздание формы (form2)

в основной форме
...
Type
TGuThread=class(TThread)
private
 procedure Go;
protected
   procedure Execute; override;
end;
...
Var Gu:TGuThread;
...
procedure TGuThread.Go;
begin
form2:=Tform2.Create(nil);
form2.showmodal;
end;

Procedure TGuThread.Execute;
begin
Synchronize(Go);
end;

Procedure TForm1.ShowWait;
begin
 Gu:=TGuThread.Create(true);
 Gu.FreeOnTerminate:=true;
 Gu.Priority:=tpLower;
 Gu.Resume;
end;

далее отрабатывает процедура с вычислениями

Procedure MyRun;
begin
...
вставляю в начале
ShowWait;
... тут тело процедуры где происходят тормоза..
далее
Gu.terminate;
end;

При старте окно появляется, но тормоза как были так и есть и после процедуры окно не закрывается. По поводу тормозов: тормозит только сама прога, другие приложения в это время нормально работают. В теле процедуры есть циклы, но там везде application.processmessages есть, но дело не в них, а в том, что идет опрос устройст (сетевых), которые отвечают через 3-5 сек.

Собственно вопрос: все ли правильно в реализации?
Нужно:
1. показать окно ожидания
2. выполнить процедуру
3. закрыть окно
при этом анимация на окне ожидания не должна тормозить, а само окно работать в другом процессе, отличном от основного приложения


 
Германн ©   (2010-11-14 20:37) [1]


> Procedure TGuThread.Execute;
> begin
> Synchronize(Go);
> end;
>

Слава Архангельскому!


 
Сергей М. ©   (2010-11-14 20:38) [2]


> все ли правильно в реализации?


Нет . Все поставлено с ног на голову.
Строго наоборот должно быть: "некие действия, которые могут длиться довольно долго" следует выполнять в доп.потоке, а информационное окно показывать в основном потоке.


 
Amoeba_   (2010-11-14 22:35) [3]

Окно отображающее ход выполнения длительной операции:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1169


 
Gu   (2010-11-15 04:14) [4]

Удалено модератором
Примечание: Не хами


 
Вариант   (2010-11-15 06:08) [5]


> Gu   (15.11.10 04:14) [4]


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

А попроще - это сделать как надо
> Сергей М. ©   (14.11.10 20:38) [2]


И кода меньше прийдется переписывать



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

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

Наверх





Память: 0.46 MB
Время: 0.004 c
3-1252485463
Xmen
2009-09-09 12:37
2011.02.06
Unable to determine field names


15-1288166553
DVM
2010-10-27 12:02
2011.02.06
Опять перепись 2010


3-1252504146
Dolphin
2009-09-09 17:49
2011.02.06
Восстановить БД - BLOB has been modified


8-1209465480
farrex
2008-04-29 14:38
2011.02.06
сравнение графических возможностей delphi с др. "редакторами"


2-1289815798
cyber-pilot
2010-11-15 13:09
2011.02.06
Вопрос про WideChar





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский