一个TThread类多线程实例

窗体单元:



unit main;



interface



uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs,myThread, StdCtrls;



type

TForm1 = class(TForm)

    Label1: TLabel;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    procedure Button3Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

private

    procedure TThreadFinsh(Sender:TObject);

public

    { Public declarations }

end;



var

Form1: TForm1;

t1,t2,t3:TThread;

implementation



{$R *.dfm}

procedure TForm1.TThreadFinsh(Sender:TObject);

begin

ShowMessage('一个线程完毕!');

end; 

procedure TForm1.Button1Click(Sender: TObject);

begin



if Button1.Caption='开始1' then

begin

Button1.Caption:='关闭';

t1.Resume;

end

else

begin

Button1.Caption:='开始1';

t1.Suspend;

end;    

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

if Button2.Caption='开始2' then

begin

Button2.Caption:='关闭';

t2.Resume;

end

else

begin

Button2.Caption:='开始2';

t2.Suspend;

end;

end;



procedure TForm1.Button3Click(Sender: TObject);

begin

if Button3.Caption='开始3' then

begin

Button3.Caption:='关闭';

t3.Resume;

end

else

begin

Button3.Caption:='开始3';

t3.Suspend;

end;

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

t1:=TmyThread1.Create(Label1,10);

t1.OnTerminate:=TThreadFinsh;

t2:=TmyThread2.Create(Label2,20);

t2.OnTerminate:=TThreadFinsh;

t3:=TmyThread3.Create(Label3,30);

t3.OnTerminate:=TThreadFinsh;



end;



end.



线程单元:



unit myThread;



interface



uses

Classes,Windows,SysUtils,Forms,StdCtrls;



type

TTestThread = class(TThread)

private

    FLabel:TLabel;

    FSleepDec:Integer;

protected

    procedure Execute; override;

public

    constructor Create(lbl:TLabel;sleepSec:Integer);

end;

TmyThread1=class(TTestThread) end;

TmyThread2=class(TTestThread) end;

TmyThread3=class(TTestThread) end;

implementation

uses main;



{ TTestThread }

constructor TTestThread.Create(lbl:TLabel;sleepSec:Integer); //参数传递

begin

FLabel:=lbl;

FSleepDec:=sleepSec;

FreeOnTerminate:=True; //让线程终止是触发OnTerminate事件

inherited Create(True);//不立即执行,只有调用resume才开始

end;



procedure TTestThread.Execute;

var

i:Integer;

begin

for i:=0 to 1000 do

begin

if terminated then Break;

FLabel.Caption:=IntToStr(i);

Sleep(FSleepDec);

end;

end;



end.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值