На этом шаге мы рассмотрим, как с помощью потоков 
можно выполнять фоновые процедуры.
Рассмотренное нами приложение позволит набирать текст в редакторе одновременно с тем, как увеличивается и выводится на форму значение переменной. На форму следует поместить компоненты TRichEdit, TLabel и два компонента TButton. Вид формы представлен на рис. 1.

Рис.1. Вид формы приложения
Проект приложения содержит два модуля. Текст модуля Main.
unit Main;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, MyThread;
type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    co:TCountObj; //объявляем объект потока
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
 //cоздаем поток
 co:=TCountObj.Create(true);
 //запускаем поток
 co.Resume;
 co.Priority:=tpLower;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
 //останавливаем поток
 co.Terminate;
end;
end.
Текст модуля MyThread.
unit MyThread;
interface
uses
  Classes, Sysutils;
type
  TCountObj = class(TThread)
  private
    { Private declarations }
    index:Integer;
    procedure UpdateLabel;
  protected
    procedure Execute; override;
  end;
implementation
uses Main;
{ TCountObj }
procedure TCountObj.Execute;
begin
 index:=1;
 while index>0 do
  begin
   Synchronize(UpdateLabel);
   Inc(index);
   if index>100000 then
    index:=0;
   if terminated then exit;
  end;
end;
procedure TCountObj.UpdateLabel;
begin
 Form1.Label1.Caption:=IntToStr(Index);
end;
end.
Текст этого примера можно взять здесь.
На следующем шаге мы рассмотрим пример программы, демонстрирующей опрос устройства с помощью потока.