Текущий архив: 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.45 MB
Время: 0.003 c