Hier verdeutlicht der Ablauf:
Delphi-Quellcode:
PDHThread.Terminate;
// setzt Terminate im Thread, nun läuft die 1000ms Wartezeit ab
// ...
PDHThread.Waitfor;
// Delphi wartet bis Terminated true wird oder Execute-Procedur beendet wird.
// ...
// Mittlerweile wird Terminated true
// Nun Springt Delphi zum nächsten Befehl
// Die Wartezeit ist noch nicht um
PDHThread.Free;
// jetzt wird alles freigegeben
// Die Wartezeit ist noch nicht um
// Der Thread ruft jetzt erst die zwei anderen Befehle auf. Und hier knallts.