Нужна информация о работе с потоками (TThread)

Вопрос:

   Нужна информация о работе с потоками (TThread), в частности, об их корректном завершении.

Ответ:

   Вот, нашел у себя.

   Для создания потока следует наследовать класс от TThread:
type
TMyThread = class(TThread)
protected
procedure Execute; override; // здесь и будет выполняться цикл
public
constructor Create; reintroduce;
destructor Destroy; override;
end;

   В перекрытом методе Execute следует выполнять цикл:

procedure TMyThread.Execute;
begin
while true do
begin
// ... тело цикла
end;
end;

   И объявить конструктор:

constructor TMyThread.Create;
begin
inherited Create(false);
FreeOnTerminate:=true; // это освободит поток при остановке
// здесь поместить код инициализации
end;

   И деструктор:

destructor TMyThread.Destroy;
begin
// здесь поместить код финализации
inherited Destroy;
end;

   Теперь нужно объявить глобальную переменную:

MyThread: TMyThread;

   Она нам нужна, если мы принудительно захотим завершить поток.
   Для запуска потока достаточно выполнить:

MyThread:=TMyThread.Create;

   Если наш поток нужно прервать и освободить, то достаточно выполнить:

MyThread.Terminate;

   После этой команды наш поток сам освободится, то есть не нужно вызывать метод Free.
   В пакете Delphi (в том числе и в справке) есть хорошие примеры по использованию потоков.