Главная страница
    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.028 c
3-83882
GavAl
2003-06-02 18:02
2003.06.26
Filter


1-84090
Seldon
2003-06-08 00:38
2003.06.26
OwnerDraw в TPageControl


1-84163
VG
2003-06-11 12:59
2003.06.26
Проблема с TStringList


6-84512
LOX
2003-04-17 11:43
2003.06.26
TWebBrowser команда правка в блокнот.


6-84489
Akni
2003-04-17 13:49
2003.06.26
WSAEventSelect





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