Könntest Du nicht den Thread mit einer Eigenschaft
FreeOnReady ertstellen, so dass der Thread freigegeben wird, wenn er sich beendet (
Execute ist durchlaufen), was exakt dem Verhalten von
FreeOnTerminate entspricht, darüber hinaus aber den Thread auch sofort freigibt, falls er bereits durchlaufen ist?
Also etwas der Art
Delphi-Quellcode:
myThread.WaitFor;
// Query is ready
DoSthWithResult(myThread);
myThread.FreeOnReady:= True;
// implicit call of myThread.Free
// always set freed reference to nil ;)
myThread:=
nil;
Auf diese Weise könntest Du im Fall eines Abbruchs, den laufen Thread einfach "vergessen" und sofort einen neuen starten:
Delphi-Quellcode:
// "forget" or free current query
myQueryThread.FreeOnReady;
// create new query thread
myQueryThread:= TQueryThread.Create(AQueryString);