Delphi Thread类的创建及使用(关于线程函数的传递例子)

Delphi Thread类的创建及使用

一、Thread类的创建:


unit Thread;
{               线程类的创建
    编译环境: Windows 2003 Sever    Delphi 7.0 Enterprise
}
interface
uses classes,sysutils,StdCtrls;
type
    TB = class(TThread)
    private
      i :integer;
      Fedt :TEdit;
      procedure Update ;
    public
      procedure execute;override;
      constructor create(IsSuspended :Boolean;edt :TEdit);
    end;
implementation
uses MainForm;

procedure TB.Update;
begin
    Fedt.Text :=inttostr(i);
end;

constructor TB.create(IsSuspended: Boolean; edt: TEdit);
begin
    inherited create(IsSuspended);
    Fedt := edt;
end;

procedure TB.execute;
begin
    i:=0;
    while(not Terminated) do
    begin
      Synchronize(Update);
      inc(i);
    end;
end;
end.

二、Thread类的使用:

unit MainForm;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls,Thread;

type
    TfrmMain = class(TForm)
      Button1: TButton;
      Button2: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      procedure FormCreate(Sender: TObject);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure ButtonClick(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;


var
    frmMain: TfrmMain;
    a,b:TB;
implementation

{$R *.dfm}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
    a:=TB.create(true,edit1);
    b:=TB.create(True,edit2);
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    freeandnil(a);freeandnil(b);
end;

procedure TfrmMain.ButtonClick(Sender: TObject);
var c :TB;
begin
    if sender = Button1 then c :=a
    else c:=b;
    if c.Suspended then begin
      c.Resume ; (sender as TButton).Caption :='暂停';
    end else begin
      c.Suspend ;(Sender as TButton).Caption :='开始';
    end;
end;

end.



发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 45 = 47