delphi多线程编程文库

delphi多线程编程文库

ID:25424001

大小:67.18 KB

页数:12页

时间:2018-11-20

delphi多线程编程文库_第1页
delphi多线程编程文库_第2页
delphi多线程编程文库_第3页
delphi多线程编程文库_第4页
delphi多线程编程文库_第5页
资源描述:

《delphi多线程编程文库》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Delphi+多线程编程文库.txt性格本身没有好坏,乐观和悲观对这个世界都有贡献,前者发明了飞机,后者发明了降落伞。多线程编程2-1多线程的基本概念WIN98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行时间和资源,或者说,把CPU时间划成片,每个片分给不同的线程,这样,每个线程轮流的“挂起”和“唤醒”,由于时间片很小,给人的感觉是同时运行的。多线程带来如下好处:(自己阅读)1)避免瓶颈;2)并行操作;3)提高效率;在多线程中,通过优先级

2、管理,可以使重要的程序优先操作,提高了任务管理的灵活性。另一方面,在多CPU系统中,可以把不同的线程在不同的CPU中执行,真正做到同时处理多任务(Win98只是模拟的,而Win/NT/2000是真正的多CPU同时操作)。多线程的两个概念:1)进程:也称任务,程序载入内存,并分配资源,称为“一个进程”。注意:进程本身并不一定要正在执行。进程由以下几部分组成:a>一个私有的地址空间,它是进程可以使用的一组虚拟内存地址空间;b>程序的相关代码、数据源;c>系统资源,比如操作系统同步对象等;d>至少包含一

3、个线程(主线程);2)线程:是程序的执行单位(线程本身并不包括程序代码,真正拥有代码的是进程),每个进程至少包括一个线程,称为主线程,一个进程如果有多个线程,就可以共享同一进程的资源,并可以并发执行。线程是进程的一个执行单元,是操作系统分配CPU时间的基本实体,线程主要由如下两部分组成:a>数据结构;b>CPU寄存器和堆栈;一个进程中的线程,可以独立运行,也可以控制另一个线程的运行。请注意:多线程不能滥用,书上提到了多线程的几个缺点(自阅)。2-2Tthread对象虽然Windows提供了比较多的

4、多线程设计的API函数,但是直接使用API函数一方面极其不方便,而且使用不当还容易出错。为解决这个问题,Borland公司率先推出了一种Tthread对象,来解决多线程设计上的困难,简化了多线程问题的处理。应该注意,Tthread对象是没有实例的,它和界面的交流,主要依靠主窗体(主VCL线程),这和其他对象使用上有些区别。一、Tthread对象的主要方法构造线程:constructorCreate(CreateSuspended:boolean)其中:CreateSuspended=true构造但

5、不唤醒false构造的同时即唤醒也可以用如下方法inheriedCreate(CreateSuspended:boolean)挂起线程:suspend(把线程挂起的次数加一)唤醒线程:resume(注意:注意这个属性是把线程挂起的次数减一,当次数为0时,即唤醒。也就是说,线程挂起多少次,唤醒也需要多少次。同时挂起的时候将保持线程的地址指针不变,所以线程挂起后再唤醒,将从挂起的地方开始运行)析构(清除线程所占用的内存):destroy终止线程(后面会具体讨论):Terminate二、线程应用的简单例

6、子:下面通过一个例子说明上述方法的应用。我们知道,循环是独占性最强的运行方式之一,现在希望建立两个线程对象,实现循环的并行运行。具体方法如下:File---New---ThreadObject这就自动在主Form中建立了一个线程单元(在对话框里写上线程名字),默认的名字是Unit2。同样方法建立第二个线程单元Unit3。要注意的是:Unit2和Unit3中有一个给定的过程:procedureObject.Execute;beginend;其中的程序是线程唤醒后自动执行的程序,也可以在里面调用其他自

7、定义的过程和函数。这个过程的结束,意味着线程程序的结束。为了构造线程,在interface的Type区,定义一个构造过程:typeObject=class(TThread)//自动给出的,也可以直接改privateprotectedprocedureExecute;override;publicconstructorcreate;//自己写的并且在implementation区域写上:constructorObject.create;begininheritedcreate(true);end其中

8、Object为线程对象的名字。所以这么写,是希望在主Form中调用这个构造过程。Create()的参数用True,表明构造出的线程为挂起状态。注意一下,在同一个线程对象里,如果两次构造,将产生两个独立的线程,不但运行是独立的,而且使用线程的局部变量也是独立的。但这里为了简化问题,还是建立了两个独立的线程对象,而且两个循环数是不同的,在并行运算时容易判断出是两个不同的程序在运行。假定我们给两个线程对象起的名字是:mymath1mymath2这样在Unit1,应该作如下声明:imple

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。