Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.039 c
7-84791
Дельфятник
2003-04-18 11:05
2003.06.26
Какие события надо ловить чтобы программа реагировала на то, (+)


3-83979
Belkova
2003-05-29 21:47
2003.06.26
Генерация уникального номера


1-84243
Evgeny
2003-06-13 08:25
2003.06.26
CRT и Console


1-84146
Comp
2003-06-10 12:02
2003.06.26
Как, если возможно, обработать событие прокручивания у формы...


1-84125
drin
2003-06-10 04:22
2003.06.26
Проблеммы с Unicode





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