Einzelnen Beitrag anzeigen

DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
439 Beiträge
 
Delphi 12 Athens
 
#17

Re: Fehlermeldung "Element hat kein übergeördnetes Fens

  Alt 18. Feb 2009, 12:45
Zitat von himitsu:
oder ganz einfach, du machst in deinen TThread-Abkömmling einen neuen Wert (z.B. Boolean), welcher beim Start False ist und setzt den am Ende deiner .Execute diesen via Synchronize auf True und fragst diesen dann in der Schleife ab.
Also etwa so:

Delphi-Quellcode:
TBeispielThread1 = class (TThread)
  private
    FMemo: TMemo;
  protected
    procedure Execute; override;
    procedure StarteThread;
    procedure DoThread;
  public
    Beendet : Boolean;
    constructor Create(Memo: TMemo; ThreadPriority: TThreadPriority);
  end;

constructor TBeispielThread1.Create(Memo: TMemo; ThreadPriority: TThreadPriority);
begin
  inherited Create(False);
  Priority:=ThreadPriority;
  FMemo:=Memo;
  Beendet:=False;
end;

procedure TBeispielThread1.Execute;
begin
  while not Terminated do begin sleep(1); StarteThread; end;
  Beendet:=True;
end;
Und dann mit der Schleifenabfrage:

Delphi-Quellcode:
 while (Th1.Beendet=False) or (Th2.Beendet=False) or (Th3.Beendet=False) do
  begin
    Sleep(10);
    Application.ProcessMessages;
  end;
Edit: Habe jetzt WaitFor genommen und es läuft ohne Fehler. Jetzt gibt es noch das Problem, dass ich jeweils in .DoThread prüfen will, ob das das Fenster noch existiert.
Devid
Devid Espenschied
Pre-sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat