Einzelnen Beitrag anzeigen

devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#17

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

  Alt 18. Feb 2009, 11: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
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat