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.