Zitat von
daywalker299:
... könnte ihr mir kurz den Sinn erklären zum Thema:
Application.ProcessMessages ...
Hai Sven,
währen deine Schleife durchlaufen wird kommt dein Programm nicht dazu die Nachrichten "die es von Windows bekommt" zu verarbeiten.
Es kann also nicht auf ein verschieben des Fensters, Buttonsklicks oder sonst etwas reagieren. Selbst das neuzeichnen von Labels findet nicht stat.
Durch den Aufruf von
Application.ProcessMessages zwingst Du dein Programm die Nachrichten abzuarbeiten und dann mit der Schleife weiter zu machen.
Hier mal drei Beispiele:
Delphi-Quellcode:
var
start: cardinal;
ende: cardinal;
// Ohne Application.ProcessMessages
// Bei mir ca 2000 ms
procedure TDemoForm.btn_Test1Click(Sender: TObject);
var
ndx: integer;
begin
start := GetTickCount;
for ndx := 0
to 100000
do
begin
lbl_Counter.Caption := IntToStr(ndx);
end;
ende := GetTickCount;
ShowMessageFmt('
Zeit %d', [ende - start]);
end;
// Mit Application.ProcessMessages
// Bei mir ca. 12000 ms
procedure TDemoForm.btn_Test2Click(Sender: TObject);
var
ndx: integer;
begin
start := GetTickCount;
for ndx := 0
to 100000
do
begin
lbl_Counter.Caption := IntToStr(ndx);
Application.ProcessMessages;
end;
ende := GetTickCount;
ShowMessageFmt('
Zeit %d', [ende - start]);
end;
// Mit Application.ProcessMessages beil allen maxloop Durchläufen.
// Bei mir ca. 3500 ms
procedure TDemoForm.btn_Test3Click(Sender: TObject);
const
maxloop = 10;
var
ndx: integer;
lcount: integer;
begin
start := GetTickCount;
lcount := maxloop;
for ndx := 0
to 100000
do
begin
lbl_Counter.Caption := IntToStr(ndx);
Dec(lcount);
if (lcount = 0)
then
begin
Application.ProcessMessages;
lcount := maxloop;
end;
end;
ende := GetTickCount;
ShowMessageFmt('
Zeit %d', [ende - start]);
end;
Wie man an den Zeiten sieht ist es aber nicht unbedingt klug ProcessMessages bei jedem Durchlauf aufzurufen da natürlich auch die Abarbeitung der Methode einiges an Zeit braucht.
Darum habe ich in Test3 einfach bestimmt das dies nur bei jedem zehnten Durchlauf passieren soll. Welchen Wert Du hier nimmst ist von deinem Anwendungsfall abhängig.
Ich hoffe es zeigt in etwas worum es geht.
Stephan B.
"Lasst den Gänsen ihre Füßchen"