首页 Delphi教程—多线程程序设计

Delphi教程—多线程程序设计

举报
开通vip

Delphi教程—多线程程序设计Delphi教程第13章多线程程序设计13.1线程的基本概念线程是应用程序中的一条基本的执行路径,它也是win32进程中的最小执行单元,线程由一个堆栈、cpu寄存器的状态和系统调度列表中的一个入口组成,每个线程都可以访问进程中的所有资源。一个进程由一个或多个线程、代码、数据和应用程序在内存中的其他资源组成。低优先级的线程一般要等待高优先级线程。一般每个线程相互独立运行,各线程间应共享资源,然而必须通过信号或其他进程内通信的方法来协调线程之间的工作。使用线程可以在下面几个方面增强用户应用程序的性能:1.避免瓶颈2.并...

Delphi教程—多线程程序设计
Delphi教程第13章多线程程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 13.1线程的基本概念线程是应用程序中的一条基本的执行路径,它也是win32进程中的最小执行单元,线程由一个堆栈、cpu寄存器的状态和系统调度列 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 中的一个入口组成,每个线程都可以访问进程中的所有资源。一个进程由一个或多个线程、代码、数据和应用程序在内存中的其他资源组成。低优先级的线程一般要等待高优先级线程。一般每个线程相互独立运行,各线程间应共享资源,然而必须通过信号或其他进程内通信的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 来协调线程之间的工作。使用线程可以在下面几个方面增强用户应用程序的性能:1.避免瓶颈2.并行操作3.多处理器13.1.1线程的优先级每个线程的优先级由下面的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 决定:(1)其他进程的优先级类(高、普通或空闲)。(2)其他进程优先级类中线程的优先级(最低、普通下、普通、普通上、最高)。(3)动态优先级增高,如果有的话,系统将在线程的基础优先级上增加。  在创建线程时,用户并没有用数字为它们指定优先级,系统将用两个步骤来确定线程的优先级,第一步是给进程分配一个优先级类,进程的优先级类将告诉系统进程与系统中的其他进程相对的优先级。第二步是为该进程所拥有的线程分配相对优先级。13.1.2线程的同步  为了避免线程之间的冲突,有必要对访问共享资源的线程进行同步控制设计,同步还可以使线程之间相互依赖的代码能够正确运行。  Win32的API提供了如下一组可以使其句柄用作同步的对象。(1)同步对象:互斥对象(Mutext)、信号灯和事件(Event)句柄(2)文件句柄(3)命令管道句柄(4)控制台输入缓冲区句柄(5)通信设备句柄(6)进程句柄(7)线程句柄13.1.3线程的局部存储(TLS)  线程的局部变量对运行此函数的各个线程是局部的,但是当线程调用另一个函数时,该函数使用的静态或全局变量对所有线程来说将是同样的值。使用线程局部存储方法,可通过对进程中用于存储和获取各个线程不 同值的索引来完成对一个线程的存储分配。13.2定义线程对象13.2.1创建线程对象  要创建一个新的Tthread派生类,可以使用如下步骤:(1)通过Delphi主菜单的【File】|【New】|【Other】在弹出的【NewItems】对话框中,选择TthreadObjec图标,单击【OK】按钮,系统将自动创建一个TthreadObject。(2)系统弹出NewsTthreadObject对话框,在其中输入一个新的类名和线程名。输入类名和线程名之后,Delphi将为用户创建一个用于实现线程的新单元文件。13.2.1初始化线程对象1.为线程指定一个优先级  但是也不能无休止的提高大量占用CPU的线程的优先级,否则可能会导致其他线程不能运行。应该只为那些花费大量时间等待一个外部事件的线程指定高优先级。2.指定是否释放线程  最简单的方法是让线程自己释放。这种情况下,可以将FreeOnTerminate属性值设为True。然而,有时用户线程对象可能会代表一个应用程序要反复执行的一个任务。13.2.3编写线程函数 使用主VCL线程  当用户使用VCL对象库中的对象时,他们的属性和方法不能保证线程是安全的,也就是说,访问属性或执行方法可能会执行一些使用了未受保护的内存的操作。  如果所有对象在一个独立线程中访问它们的属性和执行方法,用户就不必担心对象之间彼此干扰,这时要使用主VCL线程,创建一个执行必要操作的独立过程,然后在用户编程的Synchronize方法中调用这个过程。 在下述几种情况下,用户不需要使用Synchronize方法:(1)数据访问组件是线程安全的。(2)图形对象是线程安全的。(3)当使用一个线程安全的TthreadList版本时。1、使用线程局部变量  线程函数及其调用的任何过程都有自己的局部变量。这些过程也可以访问全局变量。  有时用户可能要使用一些特殊变量,他们对用户线程中所有过程而言是全局的变量,但却不能被叫一个线程类的其他实例共享。2.检查是否被其他线程终止  用户线程对象在Execute方法调用时开始运行,并且在Execute方法结束时终止。然而有时应用程序需要一个线程持续执行,直到某个外部条件得到满足。这时,用户可以让其他的线程通过Terminated属性来通知用户线程终止。当其他线程想终止用户线程时,可以调用Terminate方法,该方法将用户线程对象的Terminated属性值设为True。13.2.4编写线程的清除代码  OnTerminate事件处理过程不作为用户线程的一部分运行,它在主VCL线程中运行,因此必须注意以下两点:(1)用户在OnTerminate事件处理过程中不能使用任何线程局部变量;(2)用户在OnTerminate事件处理过程中可以安全的访问任何组件以及VCL对象而不必担心与其他线程发生冲突。13.3使用线程对象13.3.1线程的同步  VCL支持三种方法来避免其他线程与用户线程访问同样的内存区域。1.锁住对象2.使用临界区  临界区就像一个门,一次只允许一个线程进入。要使用临界区,就要创建一个全局TcriticalSection对象。该对象有两个方法:Acquire(阻塞其他线程执行临界区的代码)和Release(释放阻塞)。  每个临界区都和用户要保存的全局内存相联系,每个线程在访问一个全局内存之前都应该首先调用Acquire方法以确保没有其他线程在使用它。3.使用multi—read—exclusive—write同步  当用户使用临界区保护全局内存时,每次只有一个线程可以使用该内存区,这样的保护可能满足不了用户的要求,特别是用户要求有一个必须经常读而很少写的对象或变量的时候。13.3.2执行线程对象1.重载优先级  当在线程中指定它所能得到的CPU时间时,应在构造函数中指定线程的优先级。然而,如果线程的优先级依赖于线程何时执行,就应该创建可以进入挂起状态的线程,设置线程的优先级,然后开始执行程序。2.启动和停止线程  一个线程在运行前可以被启动和中止很多次。要临时中止一个线程的执行,可以使用线程的Suspend方法。用户可以调用Terminate方法要求一个线程提前停止,该方法将线程的Terminated属性设置为True。3.暂存线程  要暂存线程,用户必须维护一个已经创建的线程的列表,这个列表可以由使用线程的一个对象维护;另一个办法是用户可以使用一个全局变量来暂存线程。13.4利用多线程排序1.界面设计  向窗体中增加3个Label、3个PaintBox和1个Button控件。2.程序设计谢谢大家!
本文档为【Delphi教程—多线程程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
都绘匠人
国家注册城乡规划师,资深工程师,具备城乡规划领域多年从业经历
格式:ppt
大小:345KB
软件:PowerPoint
页数:15
分类:理学
上传时间:2022-04-22
浏览量:0