Delphi多线程开发技术讲解
的有关信息介绍如下:进程是应用程序执行实例,每个进程:一个私有的地址空间,它是进程可以使用的一组虚拟内存地址空间; 程序的相关代码、数据源; 系统资源,比如操作系统同步对象等; 至少包含一个线程(主线程)。线程是程序的执行单位,一个进程如果有多个线程,就可以共享同一进程的资源,并可以并发执行,线程间通信比进程间通信容易得多。典型的应用就是Word,在输入内容同时,会做拼写检查,字数统计等等。
打开Delphi7集成开发环境,File-New-Other,在弹出的New Items对话框选择Thread Object,点击OK,在弹出的New Thread Object对话框输入类名,点击OK,这样就自动生成一个新线程类的代码文件Unit2.pas
在Form1窗体加入Button1、Button2、Button3、Button4 四个按钮,分别设置其Caption属性为:启动、暂停、恢复、结束。和一个Edit1文本框,文本框Text属性设为空。在Uint1.pas文件头部uses加入Unit2。
在Unit2.pas文件中增加testThread类的私有成员变量,AEdit,MaxLoop,CurLoop,添加保护方法DisLoop()在Edit1显示当前循环,改写了类的构造方法,并编写Excute()函数体,做成循环。详细代码如下:
unit Unit2;
interface
uses
Classes,SysUtils,StdCtrls;
type
testThread = class(TThread)
private
{ Private declarations }
AEdit:TEdit; //显示循环次数用
MaxLoop:Integer; //最大循环次数
CurrentLoop:Integer; //当前循环次数
protected
procedure Execute; override;
procedure DisLoop;
public
constructor Create(Edit:TEdit;Max:Integer);
end;
implementation
constructor testThread.Create(Edit: TEdit; Max: Integer);
begin
inherited Create(False); //False创建线程后立即执行
AEdit:=Edit;
MaxLoop:=Max;
FreeOnTerminate:=True; //结束时释放资源
end;
procedure testThread.DisLoop;
begin
AEdit.text := InttoStr(CurrentLoop);
end;
procedure testThread.Execute;
var
i:Integer;
begin
for i:=0 to MaxLoop Do
begin
CurrentLoop := i;
Synchronize(DisLoop); //同步Edit1的显示
if Terminated then Exit; //结束退出函数
end;
end;
end.
在Unit1.pas中加入按钮的对应响应函数,分别实现启动线程、暂停线程、恢复线程和终止线程的功能。完整代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Unit2, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ThreadDone(Sender:TObject);
end;
var
Form1: TForm1;
//声明线程变量
MyThread:testThread;
implementation
{$R *.dfm}
//启动线程
procedure TForm1.Button1Click(Sender: TObject);
begin
MyThread:=testThread.Create(Edit1,500000);
MyThread.OnTerminate := ThreadDone; //线程结束时执行的函数
Button1.enabled:=False;
end;
procedure TForm1.ThreadDone(Sender: TObject);
begin
Button1.Enabled:=True;
end;
//暂停线程
procedure TForm1.Button2Click(Sender: TObject);
begin
MyThread.Suspended:=True;
end;
//恢复线程
procedure TForm1.Button3Click(Sender: TObject);
begin
MyThread.Suspended := False;
end;
//结束线程
procedure TForm1.Button4Click(Sender: TObject);
begin
MyThread.Terminate;
end;
end.
程序执行效果如下图,这就是简单的Delphi多线程应用,Delphi封装了很多Winodows方法,使用起来十分容易