Einzelnen Beitrag anzeigen

Poolspieler

Registriert seit: 9. Aug 2004
165 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Mein TThread blockiert die Anwendung

  Alt 3. Okt 2005, 18:48
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
Andreas
  Mit Zitat antworten Zitat