Windows中的多线程编程技术和实现.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Windows中的多线程编程技术和实现.pdf》由会员分享,可在线阅读,更多相关《Windows中的多线程编程技术和实现.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2】卷第3 I i2 0 0 2 年9 月计算技术与自动化C o M P U T I N GT E C H N o L O G YA N DA U T O M A T l O NV 0 1 2 1N o 3S e D t2 0 0 2文章编号:】0 0 3 6 1 9 9(2 0 0 2)0 30 1 0 90 8W i n d o w s 中的多线程编程技术和实现周炎涛(湖南大学,湖南长沙d 1 0 0 1 2摘要:奉文简要介绍了w i n d o w s 环境下进行多线程编程的意义重点讨论了D E I。P H I 下开发多线程应用程序这一问题,通过多线程示倒程序说明了多线程编程可明显提高
2、程序的执行艘率,反映了在w j n d o w s 环境下进行多线程编程的作用和效果关键词:线程 并发 胁l p h;操作系统中图分类号:T P 3 0 1文献标识码:AM u l t i t h r e a dT e c h n i q u e sa n dT h e i rI m p l e m e n t a t i O ni nW i n d o w sZ H o Uy”一m D(H u 眦nU n I v e r 蚍y C h a n 舻h a H 咖n4 1 0 0 1 Z)A b s t r a c t;T h 3p 8 p e r s l m p I yi n t r o d
3、u c 卅t h 5o fm u l I i t h 阡a dp r o g r a m m i n gi nw I n d o 眠e m p h a BL z e dm u l t n h r c a da p p I i c a t i o np r o g 舢m e t h o d sl nD E L P H Ie v i e n tL nd e t a“s ds h o w e dm u I“t h r e a dt e c h n 岫u e sa n dc h c”i m P l t a t b ni nW i n d o w Bb do n m u h i【h r e a dp r
4、 o g l I l p I 拈K e y v o r d s“h r e 鲥;c o n c e n;r k l p h i;o 肛r a t I“g5 y s t e m1 进程和线程进程和线程是两个相对的概念,在w i n 3 2 中,进程并不执行什么,它只是占据应用程序所使用的地址空间。为了让进程完成一定的工作,进程必须至少包含一个线程,这个线程负责执行行为。实际上,一个进程包含几个线程,它们同时执行进程地址空间中的代码。具体执行中,每个线程有自己的一组c P u 寄存器和堆栈。如果没有线程执行进程地址空间中的代码,进程也就没有继续存在的理由,系统将自动清除进程及其地址空间。在使用多线
5、程、线程编程时,有一个非常重要的问题就是同步。所谓同步是指进程、线程之间的相互通信时避免破坏各自数据的能力。w i n d o w s 环境下同步问题是由w i n 3 2 系统的c P u 时间片分配方式引起的。虽然在某一时刻,只有一个线程占用c P u(单P u 时)时间,但是无法知道在什么时候,在什么地方线程被打断,这样如何保证线程之间不破坏彼此的数据就显得格外重要。如在进行多进程编程时我们可以使用u n i x 下的进程控制”1 机制w i n d o w s 作为多线程的多任务操作系统,目前为大多数用户所接受,如何简单地在w i n d o w s 环境下进行多进程、多线程编程具有现
6、实意义和实用意义,本文简要地讨论D E L P H l 平台下开发多线程应用程序这一问题,并通过多线程数据采集的测试结果说明多线程编程技术的作用和效果。收稿日期:2 0 0 2 一0 4 2 9作者简升:周炎涛(1 9 6 31,男,啦士研究生,高级工程师,研究方向:操作系统、计算机嘲络与通信领域 万方数据计算技术与自动化2多线程优点w i n d o w s 除了操作灵活的界面,还有多线程与多任务。在w i n d o w s 中,一个程序无法独占所有的c P u 执行时间,一个程序也不是从头到尾连续执行。相反,一个程序在执行中可以分为多个程序片段同时执行。这些能同时执行的程序片段称为线程。
7、在w i n d o w s 中,操作系统同一时间可以轮流执行多个程序,这就是多任务。采用多线程处理数据可以有效地加快程序的反应速度、增加执行的效率。一般的应用程序中都要处理用户的输入,但用户的输入速度与c P u 的执行速度相比相差太大。这样,c P u 就将浪费大量的时间用来等待用户的输入(如在D O s 环境中)。如果采用多线程,就可M 用一个线程等待用户的输入;另一个线程进行数据处理或其他的工作。如对于数据采集程序,可以用一个单独的线程进行数据采集。这样,能最大限度地保证采集的实时性,而另外的线程同时叉能及时地响应用户的操作或进行数据处理,否则,程序在采集数据时就不能响应用户的操作或在
8、响应用户操作时就不能进行数据采集,尤其当采集的数据量很大、数据处理任务很重时,如果不采用多线程,采集时的漫长的等待是难以忍受的。当然,多线程要比普通程序设计复杂得多。由于任一时刻部可能有多个线程同时执行,所以,许多的变量、数据都可能会被其他线程所修改。这可以通过多线程程序中最关键的线程间同步控制问题来懈决。在M F c 中,可以使用4 个同步对象来保证多线程同时运行。它们分别是临界区对象(c c r c a l s e c t i o n)、互斥量对象(c M u t e x)、信号量对象(c s e m a p h o r e)和事件对象(C E v e n f)引。其实,多线程程序设计复杂
9、是暂时的,如果采用传统的c 进行多线程的设计或运用可移植操作系统接口P o s i x 线程创建多线程程序那么必须自己控制线程间的同步,那将是很复杂的。但是如果利用面向对象的设计方法,在P B、v B、D E L P H l 以及J A v A 等环境下都能进行多线程程序设计、编写多线程应用程序,问题就简单多丁。这是因为它们已将多线程的复杂性处理了,我们所要做的就是继承。3D E I,P H l 下多线程应用程序开发3 1利用标准例程B e g i n T h r e a dD E L P H I 的V c L(V i s u a lc o m p o n e n tL i b r a r y
10、)和R T L(R u n T l m eL i b r a r y)库把几乎全部的w i n d o w sA P I 函数封装起来“,而且在其基础上增加了一些安全措施。在实际运用时,程序员没有必要直接调用w i n d o w sA P I 函数,而是利用各单元所提供的函数库或例程库直接对系统低层进行操作。s y s t e m 单元定义的B。g i n T h r e a d 例程完整封装了w i n 3 2 的c r e a t e T h r e a d 函数,这是一个带异常处理的标准P a s c a l 函数,几乎可以处理所有自身的异常,相对于使用w i n 3 2 的c r e
11、 8 t e T h r e a d 函数,其安全系数大大增强。B eg i n T h r e a d 函数在创建时与c r e a t e T h r e a d 函数仅仅完成两项任务创建一个线程;创建一个能作为线程入口的函数相比,增加了几项保护措施:(1)把s y s t e m 单元中声明的全局变量I s M u l t i T h r e a d 设为T R u E,这佯I)e l p m 的堆栈管理器就知道当前有多个线程在运行2,从而防止多个线程同时修改它的内部结构;(2)在调用B e g i n T h r e a d 函数时,可创建一个异常框架,允许系统缺省的异常处理句柄捕 万
12、方数据第2 l 卷第3 期周炎涛:w-n d。w s 中的多线程编程技术和实现获任何未有被处理的异常线程。如果在线程函数中有任何未被处理的异常,会自动产生一个退出代码,或者线程返回的句柄为o,表示线程没有创建成功,则应用程序将会调用E n d T h r e a d过程(P r o c e d u r eE n d T h r e a d(E x l t C i o d e:I n t 8 9 e r),自动终止线程的运行。f u n c t i o nB e 画n T h r e a d(S e c u r i y A t tr i b u t e s:P o i n t e r;S t a
13、 出S i z e:I n t。g e r;T h r e a d F u n c:T T h r e a d F u n c;P a r a m e t e o:P o i n t e r;C r e ar i o n F l 8 9 s:I n t 8 9 e r;varT h r e a d I d:I n t e g e r):I n t e g e r;各参数的使用特点类似c r e a t e T h r e a d 函数。返回值为该线程的旬柄,如果为o,表示线程没有创建成功,我们还可以调用w i n d o w s 的G e t L a s t E r r o r 函数分析错误的
14、原因。3 2 使用D E L P H I 提供的T T h r e a d 类D E L P H I 对开发多线程应用程序提供强有力的支持,用户可以利用D E L P H I 下标准的多线程类T T h r e a d 来完成。其基本的方法如下:从T T h r e a d 类派生一个新类(创建T s o r r T h r e a d 类);定义新类的c r e a t e 方法;定义新类的E x e c u t e 方法,并在E x e c u f e 方法中插入线程运行时执行的代码;引用类方法创建实例。以下通过事例加以说明:新建一个单元,保存在m y s o r y p a s 单元中,
15、创建一个T S o r t T h r e a d 类,它从T T h r e a d 类中继承而来所以在程序中创建这个类的一个实例时,也就是创建了一个新的线程。接着,在该类中定义一个s o r t 方法,用来对数组进行排序,同时T S o r t T h r e a d 类超越了T T h r e a d 类的构造方法C r e a t e 和E x e c u t e,在e x e c u r e 方法中,调用了对数组进行排序的S or I 方法。具体代码如下:u n l tm y s O r t;i n t e r f a c eu s e s c I a s s e s;T T h r
16、 e a d 类在c l a s s e s 中被定义T y p eP S o t A r r a y T S o r t A r r a y;,I s。r t A r r a y=a r r a y 0 M a x I n t d i v s i z eO f(I n t。g e r)一1 o f I n t e g e;T s o r t T h r e a d c I a s s(T T h r e a d)定义T s o r t T h r e a d 类I,“v a t eT s o r t T h r e a d 类中定义私有变量F S o r t A r r a y:P S o
17、r t A r r a y;F S i z e:I n t e g e r;F A,F B,F l,F J:I n t。g e。;P r o t e c t e dp r o c e d u r eE x e c u t e;o v e r r i d。;类T s o n T h r e a d 超越了类T t h r e a d 的E x e c u t e 方法p r o c e d u r es o r t(v a r A:a r r a y o f I n t。g e r);类T s o r t T h r e a d 添加s o r t 方法叭J b I i。【o n s”u c t
18、。r c r e a t e(v a r s o r t A r r a y:ar r a y o f I n t 8 9 e r);类T s or t T h r e a d 超越类T f h r e a d 的构造方法 万方数据计算技术与自动化2 0 0 2 年0 月i m D l e m e n t a t i o nc o n s t r u c t o r T S o r t T h r e a d c r e a t e(v a r S o r t A r r a y:a r r a y o f I n t e g e r);b。g i nF S o r t A r r a y:=
19、S o r t A r r a y;FS i z e:=H i g h(S o r t A r r a y)一L o w(S o r t A r r a y)+1;F r e e O nT e r m i n a t e:=T r u e;j n h e r i t e d C r e a t e(F a l s e);e n d:p r。c e d u r eT S 0 r tr I h r e a d E x e c u t e;当线程开始时,E x e c u t e 方法将被调用b 8 9 i nS o r t(S l i c e(F S o r t A r r a y,F S i z
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 中的 多线程 编程 技术 实现
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内