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.