Ich hatte noch das FreeOnTerminate vergessen, so dass der Thread nach Beendigung nicht freigegeben wurde:
Delphi-Quellcode:
constructor TArbeiterThread.Create(aMinValue, aMaxValue: Integer; aProgressInitEvent: TProgressInitEvent;
aProgressStepEvent: TProgressStepEvent; aProgressCloseEvent: TProgressCloseEvent);
begin
fMinValue := aMinValue;
fMaxValue := aMaxValue;
fProgressInitEvent := aProgressInitEvent;
fProgressStepEvent := aProgressStepEvent;
fProgressCloseEvent := aProgressCloseEvent;
FreeOnTerminate := True; // <------------
inherited Create(False);
end;
Ja, ein Sleep(1 oder höher) im Thread gibt anderen Prozessen auch mal die Möglichkeit, etwas auszuführen.
Sleep(0) prinzipiell auch, aber ich hatte dennoch schon den Effekt, dass die CPU mit 100% weiter lief.