Thread - exemplo completo bem simples de uma thread

Top  Previous  Next

unit TesteThread;

 

interface

 

uses Forms, Controls, StdCtrls, Classes, SysUtils;

 

type

  TContaLabel = class(TThread)

    fLb: TLabel;

    fConta: Integer;

    procedure Contator;

    procedure Execute; override;

    constructor Cria(const Lb: TLabel);

  end;

 

  TForm1 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  end;

 

var

  Form1: TForm1;

 

implementation

 

////////////////////////////////////////////////////////////// thread em si

 

procedure TContaLabel.Contator;

begin

  Inc(fConta);

  fLb.Caption := IntToStr(fConta);

  if fConta = 500 then Terminate;

end;

 

constructor TContaLabel.Cria(const Lb: TLabel);

begin

  Create(False);

  fLb             := Lb;

  FreeOnTerminate := True;

  fConta          := 0;

end;

 

procedure TContaLabel.Execute;

begin

  while not Terminated do

  begin

    Synchronize(Contator);

    Sleep(10);

  end;

end;

 

////////////////////////////////////////////////////////////////// form

 

procedure TForm1.Button1Click(Sender: TObject);

var

  Lb: TLabel;

begin

  if Tag = 0 then Tag := 1;

  if Tag > 5 then Tag := 1;

  // localiza a label que será usada desta vez

  Lb := TLabel(FindComponent('Label' + IntToStr(Tag)));

  // cria a thread e passa a label que mostra a contagem na tela como parametro

  TContaLabel.Cria(Lb);

  // incrementa uma variavel que será usada na proxima vez que o botão for pressionado

  Tag := Tag + 1;

end;

 

end.