A forma mais correta na minha opinião é um código mais ou menos como o abaixo: MinhaThread.Terminate; MInhaThread.WaitFor; FreeAndNil(MinhaThread);
Porém há um macete que demorei a entender. A classe TThread possui um evento denominado OnTerminate. Para o WaitFor funcionar a contento, este evento tem que estar setado, nem que seja para dar um simples Sleep(10) ou algo assim. É como faço por aqui. [As partes desta mensagem que não continham texto foram removidas]