线程排序

      在数据处理量很大的情况下,如何在数据处理的同时响应用户操作?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为一实际的数组。这样就可以用线程实现排序,在排序过程中,用户不必等到排序结束就可以执行其它操作。这种用多线程实时响应用户操作方法在涉及大量数据处理的应用程序中显得尤为重要。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值