Einzelnen Beitrag anzeigen

Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#8

Re: Thread - Synchronize - 2 Forms - Verständnisproblem

  Alt 1. Jul 2009, 10:46
Hi!

Zitat:
Das habe ich schon verstanden.
Aber die Funktionen, die der Thread aufruft, zeichnen ja auf der gleichen Form, in der der Thread läuft.
Der Thread läuft in keinem Form. Deine Forms laufen im Haupt/VCL-Thread, das ist einer. Und dann gibt es noch deinen eigenen, erstellten Thread. Egal wo er deklariert ist oder gestartet wird, er läuft einfach immer neben dem VCL-Thread und neben anderen eventuell vorhandenen Threads. So könnte das, was du brauchst, aussehen (einfach mal so niedergeschrieben, ohne Test):

Delphi-Quellcode:
type
  MeinForm = class(TMeinForm)
    lblThreadText: TLabel;
  private
    procedure StarteDenThread;
  end;

type
  Thread = class(TThread)
  private
    Form: TMeinForm;
    procedure MachVCLSachen;
  protected
    procedure Execute; override;
  public
    constructor Create(Form: TMeinForm);
  end;

procedure MeinForm.StarteDenThread;
begin
  Thread.Create(Self);
end;

constructor Thread.Create(Form: TMeinForm);
begin
  inherited Create(False);
  Self.Form := Form;
end;

procedure Thread.Execute;
begin
  // Kram machen
  Synchronize(MachVCLSachen);
  // Kram machen
end;

procedure Thread.MachVCLSachen;
begin
  Form.lblThreadText := 'Der Thread lässt grüßen!';
end;
Mir fällt gerade auf, du erstellst den Thread ja per BeginThread. Synchronize ist eine Methode von TThread. Wenn du nicht TThread benutzen möchtest, müsstest du dir vermutlich einen eigenen Synchronisierungsmechanismus bauen.

Kleiner Nachtrag, weil du durch den Thread VCL-Objekte erzeugen möchtest: Dir ist aber schon klar, dass Synchronize die Befehle an den Haupt-Thread weiterleitet, diese *nicht* in deinem eigenen Thread ausgeführt werden, und das Form dadurch beschäftigt ist/geblockt wird, oder? Wenn du nur VCL-Dinge über den Thread erzeugen möchtest, wäre der Thread an der Stelle absolut überflüssig. Das nur noch nebenbei.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat