Delphi

本类阅读TOP10

·分布式网络考试系统原型分析及实现
·游戏外挂设计技术探讨①
·使用HOOK随心监视Windows
·Delphi 水晶报表打包解决
·试题库开发中非文本数据的处理
·如何将几个DBGRID里的内容导入同一个EXCEL表中....的问题
·如何使用Delphi设计强大的服务器程序
·工人线程中关闭窗体的实现
·用DLL方式封装MDI子窗体。
·支持XP下托盘栏气球提示的托盘单元

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
在DELPHI中用线程排序

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

 

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



相关文章

相关软件