Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#5

AW: Auf Task warten ohne zu bremsen

  Alt 26. Mai 2023, 14:59
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).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Mai 2023 um 15:08 Uhr)
  Mit Zitat antworten Zitat