Hi,
vielen Dank für Deine Antwort, die hat mich schon ein gutes Stück weiter gebracht.
Mein Beispiel hat jetzt genau das Verhalten, welches ich mir gewünscht habe.
Überarbeitetes Beispiel:
Delphi-Quellcode:
unit UnitThread;
interface
uses Classes, ExtCtrls, Windows, StdCtrls;
type
TMeinThread =
class(TThread)
private
{ Private-Deklarationen }
Text: TLabel;
i: integer;
procedure machen;
procedure ausgeben;
protected
procedure Execute;
override;
public
{ Public-Deklarationen }
constructor Create(_Text: TLabel);
end;
implementation
uses SysUtils;
constructor TMeinThread.Create(_Text: TLabel);
begin
inherited Create(false);
Priority := tpNormal;
Text := _Text;
end;
procedure TMeinThread.Execute;
begin
while not Terminated
do begin
machen;
end;
end;
procedure TMeinThread.machen;
begin
i := 0;
while i <= 100
do begin
sleep(500);
Synchronize(ausgeben);
Inc(i);
end;
end;
procedure TMeinThread.ausgeben;
begin
Text.Caption := IntToStr(i);
end;
end.
Aber ist das wirklich der richtige Weg für so eine Aufgabe?
Ich habe eine sehr große Klasse geschrieben (aktuell noch OHNE Thread), die sehr viele Berechnungen durchführt und äußerst viele Labels, Charts und andere Bedienelemente aktualisieren bzw. auslesen muss. Diese soll nun auf einen Thread umgestellt werden um ein blockieren der Anwendung zu verhindern (application.processmessages funktioniert nicht so ganz, wie ich mir es vorstelle...)
Muss ich nun wirklich für jedes Anzeige- und Bedienelement eine eigene private Variable (hier z.B. das private i:integer) deklarieren? Und dann in einer oder mehreren Methoden die jeweiligen zugehörigen Objekte aktualiseren?
Oder gibt es da eine einfachere Elegantere Lösung?
Gruß,
Poolspieler