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. |