2010/04/14 13:28

Thread Application Implementation in TThread


Delphi provides class for thread application as TThread.

Following is the simple example for thread application.

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    GroupBox1: TGroupBox;
    seTimeToWork: TSpinEdit;
    Label1: TLabel;
    btnCreate: TButton;
    btnTerminate: TButton;
    procedure FormShow(Sender: TObject);
    procedure btnCreateClick(Sender: TObject);
    procedure btnTerminateClick(Sender: TObject);

  private
    FThread:TThread;
    procedure EnableButtons;
    procedure OnTerminate(Sender:TObject);
end;

TMyThread=class(TThread)
    private
      FTimeToWork:integer;
    protected
      procedure Execute;override;
    public
      constructor Create(TimeToWork:integer);
end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// TMyThread

constructor TMyThread.Create(TimeToWork: integer);
begin
  FTimeToWork:=TimeToWork;
  inherited Create(True);
end;

procedure TMyThread.Execute;
var
  T:Integer;
begin
  t:=FTimeToWork;
  Form1.Memo1.Lines.Add('Begin execution');
  while not Terminated and (t>0) do
  begin
    Form1.Memo1.Lines.Add(format('Remaining %5.2f%%',[t/FTimeToWork*100]));
    Sleep(500);
    dec(t,500);
  end;

  if Terminated then
    Form1.Memo1.Lines.Add('Terminated by user');

  Form1.Memo1.Lines.Add('Finish execution');
end;

// TForm1
procedure TForm1.EnableButtons;
begin
  btnCreate.Enabled:=not Assigned(FThread);
  btnTerminate.Enabled:= Assigned(FThread);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  EnableButtons;
end;

procedure TForm1.btnCreateClick(Sender: TObject);
begin
  FThread:=TMyThread.Create(seTimeToWork.Value);
  FThread.OnTerminate:=OnTerminate;
  EnableButtons;
  FThread.Resume;
end;

procedure TForm1.btnTerminateClick(Sender: TObject);
begin
  FThread.Terminate;
end;

procedure TForm1.OnTerminate(Sender: TObject);
begin
  FThread:=nil;
  EnableButtons;
end;

end.




Trackback 0 Comment 0

Trackback : Cannot send a trackbact to this post.