A lenti programmal ugy elindítom az EXECUTE procedurát, mintha az egy másik applikáció lenne.
Ez a procedúra teljesen önállóan viselkedik a mi applikációnktól, akár még le is fagyhat, 
a fő applikáció ettől még vígan fut.

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TMyThread = class(TThread)
private
public
procedure Execute; override;
end;

type
TForm1 = class(TForm)
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;

var
Form1: TForm1;
MyThread: TMyThread;
implementation

{$R *.DFM}

procedure TMyThread.Execute;
const s:byte=0;
var
  x,y,a:integer;
begin
  for x:=0 to 10000 do
  begin
    form1.caption:=inttostr(x);
    inc(s);
  end;
  MyThread.DoTerminate;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  MyThread := TMyThread.Create(false);
  canvas.TextOut(0,0,'Készen van');
end;
end.

Megjegyzés:
A threadnak akár még a prioritását is állíthatjuk: FThread.Priority:=tpHighest;
Időigényes számításokat, vagy nyomtatást érdemes ilyen szálakkal letudni, ha nem akarunk közben ezekre várakozni.