Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Verständnisfrage zur Thread-Synchronisation

  Alt 13. Apr 2022, 14:17
Aus Zeitgründen mal ins Unreine und zum rantasten...

DoIt brauchst Du nicht.
Im Create kannst Du ein Label übergeben und in fLabel speichern (Constructor entsprechend überschreiben).
Execute kann ungefähr so aussehen:

Delphi-Quellcode:
  procedure TMyThread.Execute;
  var
    I1, I2: Cardinal;
  begin
    I1 := 0;
    I2 := 0;
    try
      while (not Terminated) do
        begin
          Inc(I1);
          if (I1 >= 1000000) then
            begin
              Inc(I2);
              Synchronize(
                procedure
                  begin
                    fLabel.Caption := I2.ToString;
                  end);
              I1 := 0;
            end;
        end;
    except
      raise;
// on e: exception do begin
// mache hier irgendetwas mit dem Fehler.
    end;
  end;
Der Thread läuft also dauernd durch und berechnet etwas. In Abständen wird ein Zwischenwert in dem Label ausgegeben.
Synchronize wartet dafür, bis die VCL bereit ist, dem Thread eine Änderung zu ermöglichen. So lange steht die Schleife still.
Während der Synchronisierung steht die VCL still (was man aber nicht merkt, da die Synchronisierung nur kurze Zeit braucht. Wenn die aber eine Minute brauen würde, würde die VCL eine Minute hängen.
Nach der Synchronisierung arbeitet der Thread wieder weiter.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (13. Apr 2022 um 14:23 Uhr)
  Mit Zitat antworten Zitat