Delphi软件开发技术 作者 张世明 P7.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 多线程 直到现在,世界上大多数计算机仍然采用的是冯·诺依曼结构,这种结构的特点就是顺序处理,一个处理器在同一个时刻只能处理一件事情。 Windows 9x及其后版本采用一种全新的任务调度策略,它把一个进程划分为多个线程, 每个线程轮流占用CPU的运算时间,操作系统不断地把线程挂起、唤醒、再挂起、再唤醒,如此反复, 由于现在CPU的速度比较快,给人的感觉是多个线程在同时执行,就好像有多个CPU存在于计算机中一样。 7.1??? 多线程概述 7.2??? 多线程编程 7.3??? 多线程深入 7.1 多线程概述 7.1.1 什么是多线程? 进程是应用程序的执行实体,每个进程是由私有的虚拟地址空间、代码、数据和其他各种系统资源组成的。 进程在运行过程中创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关闭。 线程是进程内部的一个执行单元(如可以是一个函数或一个活跃的类对象等)。 系统创建好进程后,实际上就启动执行了该进程的主执行线程。主执行线程终止了,进程也就随之终止。 每一个进程至少有一个线程(即主执行线程,它无需由用户去主动创建,是由系统将应用程序启动后创建的), 用户根据需要在应用程序中创建其他线程,多个线程并发地运行在同一个进程中。 一个进程中的所有线程都在该进程的虚拟地址空间中,使用这些虚拟地址空间、全局变量和系统资源, 所以线程之间的通讯要比进程之间的通讯容易得多。多线程设计在实际中的使用较为广泛。 7.1.2 使用多线程的优缺点 (1) 由于CPU的处理速度比较快,可以使用户在做一件事情的时候还可以做另外一件事。 (2) 在多个CPU的情况下,可以充分利用硬件的优势:将一个大任务分成几个小任务由不同的CPU来完成。 (3) 可以为每个线程设置优先级,调整工作的进度。 2.多线程在帮助解决某些问题的同时,也有一些新的问题: (1) 滥用线程容易使程序变得支离破碎,增加程序编写的复杂度。 (2) 在多个线程对数据进行读和写操作的时候,数据的安全有效性可能会遭到破坏。 (3) 有时如果频繁地在线程间切换会耗费大量的CPU时间,使得整个工作的处理时间延长了。 因此,进行多线程的程序设计,要充分考虑到设计的可行性和安全性,发挥出并行运行的高效性,最大限度地提高程序的效率。 3.利用TThread类来编写多线程应用程序的一般步骤如下: (1).从TThread类派生出一个新的线程类。 (2).创建线程对象。 (3).设置线程对象的属性,比如优先级等。 (4).根据具体情况挂起或唤醒线程。 (5).结束线程。 7.2 多线程编程 7.1.1 创建线程对象 Delphi用TThread类操纵线程对象。TThread类将Windows API函数中关于多线程方面的函数封装到了一起。 TThread类是一个抽象类,不可以直接创建它的实体,但是可以创建它的派生类。 要创建线程对象,可以使用[File]菜单上[New]项的[Other]命令,然后在[New]对话框中双击“Thread Object”图标, 再在打开[New Thread Object]的对话框中按照提示输入线程对象的类名,一般以大写的T打头,如:TMyThread。 采用上述方式创建的线程对象比较简单。不过,如果需要设置线程对象的安全属性和栈长度的话,最好调用Windows的CreateThread()。 对于线程对象来说,需要在构造函数中初始化线程对象,例如设置线程的优先级。 另外还要重载线程函数即Execute(),重载后的Execute()就是线程创建后要执行的代码。 从语法上讲,线程函数与一般的函数没有太大的区别,但有两点要注意: (1).线程函数属于线程对象的一个成员,而线程对象是从Trhread继承下来的。 因此,在线程函数中,可以直接访问Thread的属性、方法和事件,不需要加对象限定符。 (2).应用程序中可能有多个线程存在,这些线程共享同一个进程地址空间,编程时要考虑一些特殊的规则。 下面就可以根据特殊的需要修改新的线程类了。 TThread类有一个构造函数Create,函数原型如下: Constructor Create(CreateSuspended:Boolean); 其中参数CreateSuspended为一个布尔类型的变量。 如果设置为False,则线程对象创建后立即调用TThread

您可能关注的文档

文档评论(0)

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档