Oder sich informieren lassen.
Wo finde ich denn diese "eigene Messageloop"
Im Windows
Der Grund ist einfach nur, dass DU zu häufig das
Application.ProcessMessages;
ausführst
und somit du selber die Bremse bist, weil du zusätzlich unnötig viel Code ausführen lässt.
Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
begin
var C := GetTickCount;
for var i := 0 to 10000 do
Label1.Caption := i.ToString;
Label1.Caption := (GetTickCount - C).ToString;
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
var C := GetTickCount;
for var i := 0 to 10000 do begin
Label1.Caption := i.ToString;
Application.ProcessMessages;
end;
Label1.Caption := (GetTickCount - C).ToString;
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
var C := GetTickCount;
for var i := 0 to 10000 do begin // Kommentar siehe nachfolgend
Label1.Caption := i.ToString;
if i mod 500 = 0 then
Application.ProcessMessages;
end;
Label1.Caption := (GetTickCount - C).ToString;
end;
Ein statisches Intervall ist natürlich echt blöd, weil was ist, wenn irgendwas anderes bremst, es auf einem anderen Rechner langsamer/schneller arbeitet?
Also besser eine zeitliche Abhängigkeit, wie z.B. alle 100-250 oder 1000 Millisekunden
Delphi-Quellcode:
var C := GetTickCount;
for var i := 0 to 10000 do begin // Kommentar siehe nachfolgend
Label1.Caption := i.ToString;
if GetTickCount - C > 250 then begin
Application.ProcessMessages;
C := GetTickCount;
end;
end;
Es gibt auch Anbderes zum Messen und man beachte, dass im aktuellen Delphi 11 nun auch noch standardmäßig die Überlaufprüfung aktiv ist (falls Windows mal mehr als 47 Tage lang durch läuft).