Zitat von
RWarnecke:
Erstmal ein dickes Danke an Thomas. Ich habe das ganze jetzt so gelöst :
Delphi-Quellcode:
try
SearchForCopy := TSearchCopy.Create(false);
SearchForCopy.FreeOnTerminate := False;
SearchForCopy.WaitFor;
SearchForDelete := TSearchDelete.Create(false);
SearchForDelete.FreeOnTerminate := False;
SearchForDelete.WaitFor;
finally
SearchForCopy.Free;
SearchForDelete.Free;
end;
Kann mir jetzt noch jemand erklären, warum ich die TThreads selber freigeben muss und nicht über FreeOnTerminate ?
Jetzt habe ich nur noch das Problem, das mein Statusfenster zwar geöffnet wird aber nichts anzeigt von dem was meine beiden Threads macht. Wie löse ich das jetzt noch ?
Ich nochmal...
So hatte ich das nicht gemeint - hier laufen jetzt die zwei hintereinander ab.
Besser wäre
Delphi-Quellcode:
try
SearchForCopy := TSearchCopy.Create(true); // create suspended !
SearchForCopy.FreeOnTerminate := False;
SearchForDelete := TSearchDelete.Create(true); // create suspended !
SearchForDelete.FreeOnTerminate := False;
SearchForCopy.Resume; // thread laufen lassen
SearchForDelete.Resume; // thread laufen lassen
SearchForCopy.WaitFor; // warte auf Ende
SearchForDelete.WaitFor; // warte auf Ende
finally
SearchForCopy.Free;
SearchForDelete.Free;
end;
So können die beiden Threads parallel laufen.
Das mit dem Freigeben hat folgenden Sinn:
Damit das WaitFor überhaupt funktioniert - darf sich der Thread am Ende nicht selber freigeben, sonst bekommst Du eine Zugriffsverletzung. Also musst Du das selber erledigen.
Gruss