下载贤集网APP入驻自媒体
在Ddelphi中,关于多线程的编程多是verrideTThread类。这里介绍另外一种方法,用BeginThread创建安全线程。
一般编程都知道CreateThread是window提供的API函数,而BeginThread是Delphi对CreateThread进一步的封装,内部实现时用到了CreateThread 。
实例:
建立一个Form窗体单元,在其中放置2个Edit和button组件,代码如下:
unit Unit1;inter
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button6: TButton;
Button7: TButton;
Button2: TButton;
Button3: TButton;
Button5: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1 : TForm1;procedure incedit1; stdcall; //定义两个循环过程
procedure incedit2; stdcall;implementation
var
th1,th2 : cardinal; //卡迪纳尔 无符号整型
h1,h2 : integer;procedure incedit1;
var
i:integer;
begin
i:=0;
while true do
begin
form1.edit1.text:=inttostr(i);
i:=i+1;
end;
end;procedure incedit2;
var
i:integer;
begin
i:=0;
while true do
begin
form1.edit2.text:=inttostr(i);
i:=i+1;
end;
end;
{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject); //启动线程
begin
h1:=beginthread(nil,1024,@incedit1,nil,0,th1);
h2:=beginthread(nil,1024,@incedit2,nil,0,th2);
end;procedure TForm1.Button6Click(Sender: TObject); //中止线程1
begin
terminatethread(h1,0);
end;procedure TForm1.Button7Click(Sender: TObject); //中止线程2
begin
terminatethread(h2,0);
end;procedure TForm1.Button4Click(Sender: TObject);//唤醒线程1
begin
resumethread(h1);
end;procedure TForm1.Button5Click(Sender: TObject);//唤醒线程2
begin
resumethread(h2);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
suspendthread(h1);
end;procedure TForm1.Button3Click(Sender: TObject);
begin
suspendthread(h2);
end;end.