在DELPHI中用线程排序

原创 2000年09月14日 09:30:00


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


在DELPHI中用线程排序

2000年09月14日 09:30:00 在数据处理量很大的情况下,如何在数据处理的同时响应用户操作?Windows95/98和WindowsNT作为多线程的多任务操作系统,其调度单元...
  • softart
  • softart
  • 2007年10月27日 06:57
  • 163

在DELPHI中用线程排序

在数据处理量很大的情况下,如何在数据处理的同时响应用户操作?Windows95/98和WindowsNT作为多线程的多任务操作系统,其调度单元是线程,即线程是系统分配处理器时间资源的基本单元,所以我们...
  • nhczp
  • nhczp
  • 2006年12月05日 09:00
  • 812

Delphi Thread 进程和线程函数(1)

线程和进程函数: 1.WinExec - 运行外部程序 //声明 WinExec(   lpCmdLine: LPCSTR; {文件名和参数; 如没指定路径会按以下顺序查找: 程序目录/当前目...
  • lailai186
  • lailai186
  • 2013年04月08日 15:52
  • 2081

delphi中使用多线程及函数调用多参数

Windows API 调 用CreateThread 函 数 来 创 建 一 个 线 程。 函 数 如 下:HANDLE CreateThread(LPSECURITY_ATTRIBUTES  lp...
  • god00
  • god00
  • 2011年07月21日 11:45
  • 390

delphi中Thread线程的使用方法

  TClientDataThread = class(TThread) private public    ListBuffer :TStringList;    TargetList :TStri...
  • delphi1234
  • delphi1234
  • 2008年02月20日 18:38
  • 5414

Delphi使用线程TThread查询数据库

网上查了很多资料,看了很多关于线程TThread的使用,并动手操作,但均未能达到想要的效果。我所要的效果是,线程执行耗时的操作而不影响主程序,用户使用没有卡顿的感觉。知道是使用线程编程解决,后来经过不...
  • Michael__mai
  • Michael__mai
  • 2015年12月12日 10:27
  • 1947

Delphi listview 点击列头排序

listview 的数字排序。 首先添加全局变量 m_bSort: Boolean = false;//控制双向排序 function CustomSortProc(Item1, Ite...
  • u013408061
  • u013408061
  • 2016年11月05日 00:45
  • 667

使用Handler在线程之间传递消息所遇到的问题及解决方法

目的是这样的:线程A实现录像功能,所要进行的操作是网络连接与录像存储,并且在录像过程中需要与主线程,即UI线程进行交互,然后线程A根据UI线程中的响应结果进行下一步处理。简单来说就是主线程与子线程相互...
  • qinpengtaiyuan
  • qinpengtaiyuan
  • 2012年07月15日 21:47
  • 1001

delphi7 stringgrid 点列头排序

最近在做stringgrid的项目, 下面delphi7 正常使用,均摘抄网路,但做过细微调整才能正常使用 首先排序的过程 procedure Quicksort(Grid: TStrin...
  • y281252548
  • y281252548
  • 2016年09月13日 17:26
  • 907

Delphi7 从子线程中发送消息到主线程触发事件执行

在对数据库的操作时,有时要用一个子线程来进行后台的数据操作。比如说数据备份,转档什么的。在主窗口还能同是进行其它操作。而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上...
  • OpenSchema
  • OpenSchema
  • 2004年11月08日 17:11
  • 5445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在DELPHI中用线程排序
举报原因:
原因补充:

(最多只允许输入30个字)