Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.06;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
11-1229287775
DenisArd
2008-12-14 23:49
2011.02.06
Как загрузить иконку нужного формата?


2-1289631411
Fredwriter
2010-11-13 09:56
2011.02.06
Потоки


2-1289696791
kiro
2010-11-14 04:06
2011.02.06
Запуск программы в консоле


4-1245172423
Дмитрий
2009-06-16 21:13
2011.02.06
Как создать консольную форму


15-1287992249
brother
2010-10-25 11:37
2011.02.06
Пионеры-гоголевцы