зачем вообще использовать TIdThread, достаточно TThread. что касается немедленной остановки потока, то метод Terminate делает всего лишь:
Код:
procedure TThread.Terminate;
begin
FTerminated := True;
end;
т.е. никакой реальной остановки не происходит. чтобы это происходило нужно в методе Execute проверять свойство Terminated и при его значении True делать выход из Execute.