说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在DELPHI中用线程排序

HTML文档下载 WORD文档下载 PDF文档下载
在DELPHI中用线程排序

在数据处理量很大的情况下,如何在数据处理的同时响应用户操作?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编写医院的复杂报表 用Delphi程序维护Paradox 数据表的索引 用Delphi的InterBase数据库开发C&S应用程序 用Delphi进行数据库之间转换 用Delphi开发“瘦”单机数据库应用系统 用Delphi如何实现VFP中的Cache特性 用Delphi设计数据库应用的几点体会 在我们日常工作中,常会碰到这样一个难题:一大堆-Delphi资料 用DELPHI制作应用软件 用Dephi 程 序 维 护Paradox 数 据 表 的 索 引-Delphi资料 用Dephi程序维护Paradox数据表的索引-Delphi资料 用InstallShield制作数据库应用系统的安装程序-Delphi资料 在BDE中使用ASCII-Delphi资料 在DBMemo中查找文字-Delphi资料 在Delphi 程序中维护DBF 数据库 在Delphi 中 利 用 Tbatch 组 件 完 成 数 据 批 处 理 在Delphi 中使用计算出的字段 在Delphi3 程 序 中自 动 检 测、 建 立 数 据 库 别 名 和 表 格 在Delphi3程序中自动检测、建立数据库别名和表格 在Delphi4 BDE中配置Access数据库 在Delphi5 中修改了Delphi自带的VCL Source文件后怎样重建Delphi的库文 在DELPHI程序中动态设置ODBC数据源 在DELPHI程序中使用ADO对象存取ODBC数据库 在DELPHI程序中自动设置ODBC数据源 在Delphi的DBGrid中插入其他可视组件 在Delphi的Socket编程中如何从服务器向指定的客户机发送信息? 在Delphi动态生成定义数据库 在Delphi中处理数据库日期型字段的显示与输入 在Delphi中简单实现多重查询 在Delphi中建立和使用别名 在DELPHI中使用ADO对象存取ODBC数据库 各位老师,我在登录lotus notes时,点击“进入”按纽在进入系统之前,系统会提示出错信息“Generic LSE failure (no more info),请问是怎 [在线求救]:filedataTime()这个函数为什么没有?? 一个很搞笑的问题,望各位高手解决一下,谢谢。 怎样用VC调用WEB SERVICE服务?(急) win2000设置文件夹共享不能设置密码吗? 在创建基于对话框的应用程序时,为何通过函数PreCreateWindow来修改对话框的风格会无效? 用sqldmo可以实现事件探查器的功能吗? 高手帮忙. 怎样设置全局变量?急! NOKIA6610手机用数据线怎样和电脑相连? C问题,一函数输入参数为一个,要求输出参数为五个,怎么办? 急送分,不知道这个问题算不算挑战,DataTable的合并问题? 请教各位高人应该如何实现这样一个功能的自定义标签? 难题,如何把二维数组传给函数 关于在datagrid中超链结和 pager问题,有耐心和热心的人请帮我看看 我是学php的. 大家来讨论一下C# 和Java ,回贴均有分!! DB2的自增型变量怎么设?? 我是学php的. 谁可以讲解一下telnet的工作原理????? 狂人语录 那有BOCHS的中文帮助 在server2003操作系统下使用sql server2000 的问题 各位大侠 请问如何在C/s 下Windows程序中 找一个控件 100分 朋友! 关于英文版VC6的问题 请大师指点ASP中unicode to ansi 的问题 richtext中RtfText的内容如何编辑?200分,解决问题另外奉送! 即将前往恒生面试,大家帮我看看需要准备什么. 那有BOCHS的中文帮助 phoenix7789请回答!!!^_^ 我在装Report Machine控件时,Delphi提示我找不到RXGIF.duc,谁在给我一个? 肤色检测的问题,急!!! 如何对asp.net的程序进行加密 用datagrid问题,总是提示列键信息不足或不正确,更新影响多行, 大家来讨论一下C# 和Java ,回贴均有分!! 请问一个sql语句写法问题,100分!!!在线等待 谁能给我一点写网站制作方面投标书或者详细方案 wsad5 怎么连上ORACLE数据库啊 并非复古——关于微内核模式ASP开发框架的讨论,欢迎高手进入! 那有BOCHS的中文帮助 我愿送500分求解JAVA问题!!!!!! 关于frame里面的参数传递问题,火急 find函数的问题,请各位老兄帮忙 请问这个链接怎么写? 用xsl将xml转成html提示.... 为什么看不到邻近计算机? 关于浏览器的自定义工具栏! 无法打开web项目bbs 请告知可以下载Domino数据库安装文件和Lotus Notes的网址!在线等 我的ie6无法加载applet,请教解决方法! 如何用ASP写关闭当前窗体的代码? 什么叫做阴沟里翻船? 他是全世界以个人名义捐助慈善事业最多的人用英语怎么翻译 迈克尔杰克逊是全世界以个人名义捐助慈善事业最多的人 汉语翻译英语 Today ,our story is ending. 阴沟里翻船什么意思 “阴沟里翻船栽到家”是什么意思? 古今异义现象是什么 下列哪项没有古今异义现象?A、长太息以掩涕兮,哀民生之多艰B、仍乃太区区C、同心而离居,忧伤以终老D、此所以学者不可以不深思而慎取之也 “以为”是古今异义? 下列句中加点词不存在古今异义现象的一项是A 博涉书记      B 干善待遇      C 访以当时之事      D 可以自娱请写出各项解释 英语of与for的区别是什么? 请问英文of和for的不同是什么都分别怎么用 日本首相出访土耳其 欲游说其勿购中国日本拟上调育儿休假补贴发放比例 增加奥巴马医保网站再次瘫痪 众院将举行听美国一醉酒男子被捕后拿总统奥巴马为自澳洲农民呼吁设“全澳产”通道 为本地今秋首次暴风强势登陆法国 数万户家庭统计显示韩国火葬率为74% 比20年美国一男子为取啤酒冒险重返失火房屋险德国政界对美监听默克尔愤怒 欲传唤斯报告称全美国一年有500名少年儿童死韩国反导系统正式开建 被指应避免刺激童话大王另类“西游记”晒奇妙拉姆宣布退出德国国家队7月25日 星期五2014年学大中高考成绩硕果累累看多情绪开始逐步回落 关注利率债和中遇汽车强行闯关,三道防线保安全翰墨颂盛世·丹青抒华章夏季吃薏米可祛湿养颜上班路上自己跌伤 不能认定为工伤左手电话右手烟 “潇洒”上高速受罚扬子悦团翡翠珠宝团购火爆
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘