在DELPHI中用线程排序

来源:互联网 发布:多核软件如何运行 编辑:程序博客网 时间:2024/04/27 13:51

======================================================
注:本文源代码点此下载
======================================================

在数据处理量很大的情况下,如何在数据处理的同时响应用户操作?windows95/98和windowsnt作为多线程的多任务操作系统,其调度单元是线程,即线程是系统分配处理器时间资源的基本单元,所以我们可以利用线程实现在处理大批量数据的同时响应用户操作。

delphi作为一个优秀的开发平台,对开发多线程应用程序提供了强有力的支持,即可直接利用32位windows环境提供的win32api接口函数createthread,也可利用delphi中提供的beginthread函数。在下面例子中,正是使用了delphi提供的tthread类。

一.基本的方法如下:

1.从tthread类派生一个新类。(创建tsortthread类)

2.定义新类的create方法。

3.定义新类的execute方法,并在execute方法中插入线程运行时执行的代码。

4.引用类方法创建实例。

二.例子的详细代码及说明:

首先,新建一个单元,保存为mysort.pas.在此单元中,我们创建了一个tsortthread类,它从tthread类中继承而来,所以当我们在程序中创建这个类的一个实例时,也就是创建了一个新的线程。

接着,在该类中定义一个sort方法,用来对数组进行排序,同时tsortthread类超越了tthread类的构造方法create和execute,在execute方法中,调用了对数组进行排序的sort方法。具体代码如下:

unitmysort;

interface

usesclasses;//tthread类在classes中被定义。

type

psortarray=tsortarray;

tsortarray=array.[0..maxintdivsize

of(integer)-1]ofinteger;

{此处定义了tsortthread类}

tsortthread=class(tthread)

private

{在tsortthread类中定义了如下几个私有变元}

fsortarray:psortarray;

fsize:integer;

fa,fb,fi,fj:integer;

protected

{类tsortthread超越了类tthread的execute方法}

procedure execute;override;

{类tsortthread添加了一个sort方法}

procedure sort(vara:arrayofinteger);

public

{类tsortthread超越了类tthread的构造方法}

constructorcreate(varsortarray:arrayofinteger);

end;

implementation

constructortsortthread.create(varsortarray:arrayofinteger);

begin

fsortarray:=@sortarray;

fsize:=high(sortarray)-low(sortarray)+1;

freeon terminate:=true;

inheritedcreate(false);

end;

{当线程开始时,execute方法将被调用。}

procedure tsortthread.execu

te;

begin

sort(slice(fsortarray,fsize));

end;

{下面实现了冒泡法排序}

procedure tsortthread.sort(vara:arrayofinteger);

var

i,j,t:integer;

begin

for i:=high(a)downto low(a) do

for j:=low(a)to high(a)-1 do

if a[j]>a[j+1] then

begin

t:=a[j];

a[j]:=a[j+1];

a[j+1]:=t;

if terminated then exit;

end;

end;

end

最后,在用户应用程序的implementation处加入usesmysort,在执行排序的地方加入tquicksortthread.create(sortarray),其中sortarray为一实际的数组。这样就可以用线程实现排序,在排序过程中,用户不必等到排序结束就可以执行其它操作。这种用多线程实时响应用户操作方法在涉及大量数据处理的应用程序中显得尤为重要。

trackback: http://tb.blog.csdn.net/trackback.aspx?postid=3128


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击