Einzelnen Beitrag anzeigen

jziersch

Registriert seit: 9. Okt 2003
Ort: München
240 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Label in Schleife zeichnen lassen

  Alt 25. Mär 2022, 08:35
nein, ich zeichne nur alle 20ms sowas ... aber ich will eben keine ProcessMessages, sondenr nur das .paint
Willst Du eine Statusausgabe für den Progress in einem Thread?

Ich empfehle die Verwendung einer gelockten globalen variable/record. Im einfachsten Fall verwende einfach
TInterlocked.Increment(FMyProgress);
TInterlocked.Increment(FMyProgressHasChanged);

Du kannst in deiner UI einen Timer nehmen und dort alle X ms abfragen ob sich FMyProgressHasChanged geändert hat, und wenn ja dein Label/UI mit den Daten aus FMyProgress zu aktualisieren.

Schau Dir mal die Klasse TMultiReadExclusiveWriteSynchronizer an. Damit kann man sehr effektive Locks realisieren. Das Prinzip ist immer, dass ein Thread nur auf seinen Daten arbeitet und einen gelockten 2. Datensatz dafür verwendet, bei Bedarf Daten dem Hautpformular zur Verfügung zu stellen.

Ich empfehle einen riesen Bogen um TThread.Synchronize zu machen. Das Ding hätte nie erfunden werden sollen.

Falls es nicht um threads geht schau mal hier: https://www.delphipraxis.net/1503595-post7.html
Vielleicht reicht auch schon ein Label1.Update.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF

Geändert von jziersch (25. Mär 2022 um 08:38 Uhr)
  Mit Zitat antworten Zitat