DELPHI中多线程研究

来源 :中国新通信 | 被引量 : 0次 | 上传用户:tuojing
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  一、进程与线程
  一个操作系统有多个进程在同时进行,而一个进程又会有多个线程在同时进行,每个线程都有自己的执行状态和独立的上下文结构(保存在线程控制块中)及执行栈(用户栈、系统栈),同一进程中的线程通过各种同步机制(如临界区、事件、互斥量、信号灯等)来实现对共享资源的访问。
  二、Delphi中的多线程机制
  Delphi编译环境的核心是可以直接调用几乎所有的Windows API函数。通常是通过过程调用一系列外部模块来实现,其最大的优点是利用面向对象的技术支持。通过对Delphi中类实现的源代码分析,可以从中了解到类的构造过程及功能的实现,以便更有效的利用其提供的线程类完成多线程程序设计。
  Delphi中多线程技术的实现是通过TThread类来封装Windows API的有关线程操作的编程接口。TThread类继承自TOb-ject,除继承父类的成员外还定义了一些属性和方法,主要分为线程对象属性、线程对象方法、线程对象事件处理三类:
  (1)线程对象属性(Properties):
  FatalException异常处理对象
  FreeOnTerminate布尔量,决定线程结束时是否清除
  Handle线程句柄
  Priority线程优先级
  ReturnValue线程返回值
  Suspended布尔量,判断线程是否已挂起
  Terminated布尔量,判断线程是否需要结束
  ThreadID线程全局唯一的标记
  (2)线程对象方法(Methods):
  AfterConstruction对象创建后运行,重载自父类
  Create创建线程对象构造器
  Destroy释放线程对象析构器
  DoTerminate释放线程前调用用户的清除例程
  Execute线程执行,虚类函数,子类需重载
  Resume使线程重新执行
  Suspend挂起运行线程
  Synchronize线程间操作同步
  Terminate置线程终止标记
  WaitFor等待线程结束
  (其它继承自父类TObject对象)
  (3)线程对象事件处理(Events):
  onTerminate线程结束前调用的方法指针
  2.1线程的创建、运行和终止
  线程类调用继承自父类的构造器(con-structor Create)创建对象实例,接着调用线程管理例程的Addthread全局例程将全局线程记数值加1,随后即通过线程管理例程中的BeginThread全局例程调用Windows API函数Createthread,以参数形式向其传入线程运行主函数Threadproc。在此之前还将全局变量IsMultiThread置为真,以用于各线程安全地访问内存管理器实现多线程保护。值得注意的是,线程类在创建内核线程对象时总是将其置为挂起状态(为保证线程对象初始化安全),而在其AfterConstruction(重载其父类的方法)中,即在线程类的对象创建后,在判断CreateOnsuspend的保护变量后,调用Resume方法使线程开始运行。其次,线程运行主函数Threadproc代表了线程执行的全过程。当其开始运行时,直接调用TThread的Execute虚方法(线程的主要执行部分),线程执行完毕后,置线程结束标记。执行DoTerminate方法运行CallOnterminate调用用户事件处理挂钩Onterminte处理用户线程结束前的清理工作。若选择FreeOnTermi-nate属性为真,则线程运行完成后,将通过Free方法调用析构器Destory释放线程对象,关闭线程句柄,将全局线程记数减1,最后通过线程管理例程的EndThread调用API函数ExitThread通知操作系统线程结束。
  2.2线程的状态切换操作
  Delphi中使用私有方法GetPriority和SetPriority获取和设置线程优先级(封装Windows API的GetThreadPriority和Set-ThreadPriority)。但动态改变线程的优先级对线程的执行有潜在的危险,不慎重地提高优先级可能会造成处理器资源分配的不合理,使某些线程始终得不到处理器时间。最好是在线程构造器中创建线程对象后初始化正确的线程优先级。当用户需要挂起运行线程时,通过公有方法Suspend设置线程挂起标记,调用API函数SuspendThread挂起执行线程。唤醒线程时,使用封装了API函数Re-sumeThread的公有Resume方法实现。运行的线程是可以多次挂起和重新执行的。
  2.3线程间的同步
  多个线程在同一进程空间内共享进程资源带来方便的同时,也不可避免的带来各线程间的同步问题。在Delphi环境内,有些对象对于多线程应用不一定是安全的,其中,带Session部件的数据库组件、图形对象(如Tfont、Tpen、Canvas等)、对象的构造和析构本身、分配内存等是线程安全的。而可视组件库VCL中有关图形设备接口GDI的属性和方法不是线程安全的。
  三、结束语
  本文描述了多线程的概念及在Delphi环境中的多线程机制,剖析了Delphi的线程类的实现过程,为设计有关Delphi的相关程序打下了一定的基础。
其他文献
随着科技的发展,数据通信已经无处不在,大到工业生产,小到日常生活,随处可见通信的影子。通信技术的发展也是一日千里,目前最常用的两种通信方式是变换域通信和扩频通信。这两种通
会计是人类社会共同智慧的结晶,在国际上具有通用性.随着世界经济一体化进程的加快和我国经济的发展,特别是我国加入世界贸易组织(WTO)后,我国经济正逐步融入国际社会,国际间
一、西部物流的现状近年来西部的现代物流虽然有一些发展,但仍然处于起步阶段.主要表现在:西部企业对物流服务需求的认识不足,现代物流的观念尚未在工商企业中得到普及;物流
当前,在拉动我国经济增长的"三驾马车"中,投资是第一推动力.2002年我国经济增长8个百分点,其中投资拉动经济增长5.4个百分点,即投资对经济增长的贡献率为54%,而据有关部门统
【摘要】基于SBR/Image方法射线跟踪法是预测无线信道电波传播特性的一种高效方法,本文将SBR/Image方法运用具体室内环境中,借助Wireless Insite软件平台,仿真得到室内环境无线信道特性参数。  【关键词】SBR/Image室内环境传播特性  一、方法和原理  随着无线通信业务正逐渐由室外环境向室内扩展和延伸,这就迫切需要一种对室内电波传播特性进行评估的有效手段。而射线跟踪技术
【正】以前的"思品课"上,大多数学生都不太感兴趣,觉得上政治课就是听一些深奥的大道理,枯燥无味。学生习惯于死记硬背,被动接受,最终导致学生越来越不喜欢政治课,教师教起来
龙,司水之神,凡龙皆能成雨,水中行走是龙的拿手好戏.麦德龙集团是目前欧洲第三大、世界第五大贸易和零售集团.截至2004年2月,麦德龙在28个国家建立了2370个商场,拥有24万员工
有人说过,中国需要有像美国的洛克菲勒、亨利·福特、比尔·盖茨,日本的松下幸之助那样的企业英雄.时代造就了战争英雄、政治英雄、文化英雄,也理应造就企业英雄.
【正】在教学实践发现:部分教师过于注重情境的热热闹闹,或外在开式的东西,忽视了把握好数学的本质进行教学,导致课堂数学教学低效甚无效。那么,如何根据数学学科自身特点,把