Форум: "Основная";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизОтрисовка окна в цикле Найти похожие ветки
← →
Эдик Дятлов (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c