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

Вниз

Отрисовка окна в цикле   Найти похожие ветки 

 
Эдик Дятлов ©   (2003-06-11 08:45) [0]

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

for i:=1 to 10000000000000

begin
label1.caption:=IntToStr(i);
MyFunc();
end;


 
Song ©   (2003-06-11 08:47) [1]

Application.ProcessMessages вставь после Label1.Caption...


 
Всеволод Соловьёв ©   (2003-06-11 08:57) [2]

если не нужно, чтобы прога реагировала на нажатия, а только отрисовывала, тогда Repaint;


 
Думкин ©   (2003-06-11 08:59) [3]

Но в этом случае писать на каждой итерации - будут сильные тормоза. Лучше писать через какие-то шаги.


 
alexvan ©   (2003-06-11 09:34) [4]

Можно этот цикл кинуть в поток TThread в отдельном модуле

unit Potok
interface
uses
Classes;
type
TWorkThread = class(TThread)
private
Answer: integer;
protected
procedure GiveAnswer;
procedure Execute; override;
end;

implementation

uses
SysUtils, GlavnajaForma;

{TWorkThread}

procedure TWorkThread.GiveAnswer;
begin
Form1.Label1.Caption:=IntToStr(Answer);
end;

procedure TWorkThread.Execute;
var
I: integer;
begin
FreeOnTerminate := True;
for I:= 1 to 1000000000000000
begin
Answer:=I;
MyFunc();
Synchronize(GiveAnswer);
end;
end;
end.

Далее в главную форму помещаешь в uses имя модуля потока, и из этой формы вызываешь поток.

procedure .....
var
NewThread: TWorkThread;
begin
.....
NewThread:= TWorkThread.Create(False);
.....
end;


 
Эдик Дятлов ©   (2003-06-11 09:52) [5]

Большое спасибо всем кто ответил !!!!
Вставил Application.ProcessMessages() и все заработало.
И еще вопрос, может кто просветит ?
Скорость работы с Application.ProcessMessages() и с использованием потока будет сильно отличаться ?


 
alexvan ©   (2003-06-11 10:00) [6]

В потоке скорость выше, а время, выделяемое потоку зависит от приоритета. По умолчанию это NORMAL. Для приоритетов имеются функции GetPriotityClass и SetPriotityClass


 
Alex_***   (2003-06-11 10:48) [7]

ЧТо заморачиваться на потоки, если нужно просто отобразить прогресс? Работа с потоками кроме сложности в реализации еще и системных ресурсов требует. Просто вызывай через определенное кол-во итераций Caption:=... и ProcessMessages


 
alexvan ©   (2003-06-11 11:21) [8]

Насчёт сложности реализации можно поспорить, а насчёт системных рессурсов не более чем ещё какое либо запущенное приложение


 
Tano ©   (2003-06-11 20:27) [9]

вполне хватит
for i=1 to 100000000 do
begin
//отрисовка, рассчеты
if i mod константа_периодичности = 0 then Application.Proc....
end;
это самые нетрудоемкие вычисления, какие можно воткнуть и геморра нет!



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

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
3-83871
SkyN
2003-06-02 14:29
2003.06.26
DBGrid.Columns


14-84650
` frizZ. `
2003-06-10 12:07
2003.06.26
От чего зависит размер скомпилированного файла ?


14-84687
Fareader
2003-06-03 19:31
2003.06.26
Работа в Днепропетровске


1-84421
next2
2003-06-09 17:24
2003.06.26
при создании новой компоненты ошибка...


1-84169
alecs
2003-06-11 16:52
2003.06.26
Как поместить в заголовок PageControl кнопку?