Terminate gehört eigentlich nicht in den Destruktor, der ist rein zum Aufräumen da. Oder wenn es dort schon steht, sollte dann ein WaitFor auf den Thread folgen, in diesem Fall nach dem SetEvent. Danach kannst du ruhigen Gewissens alles freigeben.
Bei mir steht die Sequenz Terminate, WaitFor, Free außerhalb des Threads.
Waitfor nicht nötig da im Thread Destructor schon vorhanden!