![(电路与系统专业论文)现代编程方法中几项技术的研究与应用[电路与系统专业优秀论文].pdf_第1页](http://file.renrendoc.com/FileRoot1/2019-12/13/47da6c19-1d0c-411c-9f62-8db3e94b3bc8/47da6c19-1d0c-411c-9f62-8db3e94b3bc81.gif)
![(电路与系统专业论文)现代编程方法中几项技术的研究与应用[电路与系统专业优秀论文].pdf_第2页](http://file.renrendoc.com/FileRoot1/2019-12/13/47da6c19-1d0c-411c-9f62-8db3e94b3bc8/47da6c19-1d0c-411c-9f62-8db3e94b3bc82.gif)
![(电路与系统专业论文)现代编程方法中几项技术的研究与应用[电路与系统专业优秀论文].pdf_第3页](http://file.renrendoc.com/FileRoot1/2019-12/13/47da6c19-1d0c-411c-9f62-8db3e94b3bc8/47da6c19-1d0c-411c-9f62-8db3e94b3bc83.gif)
![(电路与系统专业论文)现代编程方法中几项技术的研究与应用[电路与系统专业优秀论文].pdf_第4页](http://file.renrendoc.com/FileRoot1/2019-12/13/47da6c19-1d0c-411c-9f62-8db3e94b3bc8/47da6c19-1d0c-411c-9f62-8db3e94b3bc84.gif)
![(电路与系统专业论文)现代编程方法中几项技术的研究与应用[电路与系统专业优秀论文].pdf_第5页](http://file.renrendoc.com/FileRoot1/2019-12/13/47da6c19-1d0c-411c-9f62-8db3e94b3bc8/47da6c19-1d0c-411c-9f62-8db3e94b3bc85.gif)
已阅读5页,还剩62页未读, 继续免费阅读
(电路与系统专业论文)现代编程方法中几项技术的研究与应用[电路与系统专业优秀论文].pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
现代编程方法中几项技术的研究与应用 摘要 本文以当前高级语言编程中几项技术的研究为主要内容,阐述了这几项技术 的实质、运行机制和具体应用。 论文分为三个部分: 第一部分介绍了消息运行机制的概念、实质、运行过程以及消息机制的模拟 与应用。文中提出了在多机通讯中出现的一些特殊问题并提供了基于消息机制的 解决方法和调试与测试程序,以及消息机制应用的优缺点。 第二部分介绍了多线程编程方法的概念、实质、优缺点和在一些控制系统上 的模拟与移植。文中对于所遇到的具体问题提供了实际的解决方案。 第三部分介绍了面向对象编程的历史和发展。并简要介绍了面向对象的概 念、实质以及模拟与移植。其中包括了类的模拟和消息机制的结合以及在这样的 控制系统中的面向对象编程。 关键词:消息多线程面向对象 现代编程方法中几项技术的研究与应用 a b s t r a c t t h i sp a p e rp r e s e n t sr e s e a r c ha b o u ts e v e r a lt e c h n o l o g yo f p r o g r a m i t c o m p r i s e s t h r e em a i np a r t s :r u n n i n go fm e s s a g e 、m u l t i t h r e a d i n g p r o g r a m a n do r i e n t 喇e c t a tf i r s t ,i ti n t r o d u c e st h ec o n c e p t i o no fm e s s a g e 、t h es u b s t a n c eo f m e s s a g e 、s i m u l a t i o na n du s i n go fm e s s a g e t h ep a p e rb r i n g sf o r w a r d s o m eq u e s t i o n si nt h er e a li t e mw h i c hi n c l u d e sc o m m u n i c a t i o ni ns o m e c o m p u t e r s b yt h ew a y ,i tp r o v i d e s t h ew a yw h i c hi sb a s e dr u n n i n g m e ;s a g e t or e s o l v et h eq u e s t i o n s a t s e c o n d ,i t i n t r o d u c e st h e c o n c e p t i o n a n ds u b s t a n c eo f m u l t i t h r e a d i n gp r o g r a m 、v i r t u e a n dd e f e c t s o m eq u e s t i o n si nc o n t r o l s y s t e m a r e p u t f o r w a r da n dt h ep r o j e c tt o r e s o l v et h e q u e s t i o n s i s p r o v i d e d t h et h i r dp a r ti n t r o d u c e s t h eh i s t o r ya n dd e v e l o p m e n to fo r i e n t o b j e c tt e c h n o l o g y o nt h e o t h e rh a n d ,i ti n t r o d u c e st h ec o n c e p t i o n 、 s u b s t a n c e 、s i m u l a t i o na n du s i n go f o r i e n to b j e c tt e c h n o l o g y i ti n c l u d e s t h es i m u l a t i o no f c l a s sa n dc o m b i n a t i o nw i t hn u m i n gm e s s a g e k e y w o r d :m e s s a g em u l t i t h r e a d i n gp r o g r a m o r i e n t o b j e c t 2 现代编程方法中几项技术的研究与应用 总论: 论文中对当前编程方法中应用最多的消息运行机制、多线程编程和面向对象 编程的实质作了研究和介绍。这对我们更好地掌握这些方法,进行高级语言编程, 例如v c + + 、v b 、d e l p h i 等有很大的帮助。同时为了提高单片机编程的质量和效 率,结合炮兵瞄准手训练与考核系统和生化分析仪等项目对这些方法在 单片机控制系统上的应用作了一些简单地探讨和模拟试验,取得了初步的成功。 以前的传统应用软件,大多是静态链接而成,由某一家公司提供,所有功能 都集成在同一个软件中,一旦链接之后,运行时不可能动态替换其中的软件模块。 那时的操作系统有两大功能:首先它向用户提供一个分时系统;其次是向用户提 供一组函数库。用户程序从主程序起,一步一步驱动软件控制流程,最终完成计 算工作。操作系统始终处于被动地位,为用户程序提供服务。 现在,基于图形界面的视窗应用软件为了更好地响应键盘,鼠标等外部事件, 采用了不同的模式。应用程序从主程序起,一项一项声明所需菜单、选项、窗口 等用户界面,注册用户事件的回调函数,然后应用软件控制流程进入称为消息泵 的一个死循环。这相当于把用户程序控告4 流交给操作系统,当用户事件发生时, 操作系统再来调用用户注册的回调函数。这就是消息运行机制。 多线程编程和面向对象技术的应用也是基于这种消息运行机制。在面向对象 技术中除了需要定义一个数据结构,还需要定义一组作用于这个数据结构的运 算。以视窗对象模型为基础的“面向对象”软件包的典型代表有微软的m f c ( m i c r o s o f tf o u n d a t i o nc l a s s e s ) 。 随着计算机迅猛的发展,操作系统的不断更新,优秀的编程思想不断地被提 出来,并付诸实践。在某些方面已出现了根本性的变革。另一方面,单片机自从 8 0 年代诞生以来,便以飞快的速度发展起来,但由于其物理条件的限制,单片 机控制系统的编程仍然局限于经验的模式,很少应用那些新提出的高级语言的编 程思想。如果将不断发展的编程思想与广泛应用的单片机控制系统结合起来,一 定会大大促进单片机控制系统的进一步发展,使其更广泛的应用于各个方面。 6 现代编程方法中几项技术的研究与应用 第一篇基于消息机制的通讯模拟 第一章消息机制的简介 1 1 消息的一般概念 1 、消息的一般组成 一个消息由一个消息名称( u i n t ) ,和两个参数( w p a r a m ,l p a r a m ) 构成。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个 窗口。例如当菜单选中之后会有w m _ c o m m a n d 消息发送,w p a r a m 的高字 中( h i w o r d ( w p a r a m ) ) 是命令的号,对菜单来讲就是菜单。当然用户也 可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。 。2 、消息的接收 一个消息必须由一个窗口接收。在窗口的过程( w n d p r o c )中可以对消 息进行分析,对自己感兴趣的消息进行处理。例如,要对菜单选择进行处理,那 么就可以定义对w mc o m m a n d 进行处理的代码,如果希望在窗口中进行图 形输出就必须对w mp a i n t 进行处理。 3 、未处理消息的去向 默认的窗口过程将负责处理那些程序员不处理的消息。因为有了这个默认窗 e l 过程,我们可以利用w i n d o w s 的窗口进行开发而不必过多关注窗口各种消息 的处理。例如窗口在被拖动时会有很多消息发送,而程序员都可以让系统自己 去处理。 4 、示例: 下面有段伪代码演示如何在窑口过程中处理消息 l o n g y o u r w n d p r o c ( h w n dh w n d ,u i n tu m e s s a g e t y p e ,w p a r a m w p , l p a r a m ) 7 现代编程方法中几项技术的研究与应用 s w i t c h ( u m e s s a g e t y p e ) ( 使用s w i t c h 语句将各种消息分开 d o y o u r w i n d o w ( ) ;,在窗口需要重新绘制时进行输出 c a s e ( w ml b u t t o n d o w n ) : d o y o u r w o r k ( ) 在鼠标左键被按下时进行处理 b r e a k ; d e f a u l t : c a l l d e f a u l t w n d p m c ( ) :对于其它情况系统自己处理 1 , 2 消息机制的一般概念 系统维护一个或多个消息队列,所有产生的消息都被放入或插入队列 中。系统会在队列中取出每一条消息,根据消息的接收旬柄而将该消息发 送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循 环,在循环中得到属于自己的消息并根据接收窗口的旬柄调用相应的窗口 过程。而在没有消息时,消息循环就将控制权交给系统。所以w i n d o w s 可以同时进行多个任务。 下面的伪代码演示了消息循环的用法: w h i l e ( 1 ) 现代编程方法中几项技术的研究与应用 i d = g e t m e s s a g e ( ) ; i f ( i d = 一q u i t ) b r e a k ; t r a n s l a t e m e s s a g e ( ) ; 当该程序没有消息通知时g e t m e s s a g e 就不会返回,也就不会占用系统的c p u 时间。 。3 2 位的系统中每一运行的程序都会有一个消息队列,所以系统可以在多个 消息队列中转换而不必等待当前程序完成消息处理就可以得到控制权。这种多任 务系统就称为抢先式的多任务系统。w i n d o w s 9 5 n t 就是这样。 现代编程方法中几项技术的研究与应用 第二章消息机制实现进程内部通讯的剖析 概述: 内部进程间通讯和数据交换有多种方式:消息、共享内存、匿名( 命名) 管道、邮槽、w i n d o w s 套接字等多种技术。其中消息机制虽然同其他方法相比有 交换的数据量小、携带的信息少等缺点,但由于其实现方便、应用灵活而广泛应 用于无须大量、频繁数据交换的内部进程通讯系统之中,尤其是对于在上层主控 软件与底层工作软件之间的命令与响应上更能充分显示其良好的性能。 2 1w i n d o w s 消息机制的消息结构 w i n d o w s 是一种面向对象的体系结构,w i n d o w s 环境和应用程序都是通过消 息来交互的。w i n d o w s 应用程序开始执行后,w i n d o w s 为该程序创建一个”消息 队列”,用以存放邮寄给该程序可能创建的各种不同窗口的消息。消息队列中消 息的结构为: t y p e d e f s t r e e tt a g m s g ( h w n d h w n d ; u i n t m e s s a g e ; w p a r a m w p a r a m ; l p a r a m 1 p a r a m ; d w o r d t i m e ; p o i n t p t ; ) m s g ; n o c ! g - - 个成员变量是用以标识接收消息的窗口的窗口句柄:第二个参数 便是消息标识号,例如常用的w m _ p a i n t ;第三个和第四个参数的具体意义同 m e s s a g e 值有关,均为消息参数。前四个参数是非常重要和经常用到的,至于后 两个参数则分别表示邮寄消息的时间和光标位置( 屏幕坐标) 。把消息传送到应 1 0 现代编程方法中几项技术的研究与应用 用程序有两种方法:一种是由系统将消息”邮寄”到应用程序的”消息队列”。这是” 进队消息。”w i n 3 2a p i ( a p i 函数是操作系统留给程序员的底层函数接口,程序 员通过对a p i 函数的应用可以对系统底层进行操作。) 有对应的函数 p o s t m e s s a g e 0 ,此函数不等待该消息处理完就返回:而另一种则是由系统在直接 调用窗口函数时将消息”发送”给应用程序的窗口函数,属于”不进队消息“。对应 的函数是s e n d m e s s a g e o ,其必须等待该消息处理完后方可返回。 下面利用v c + + 举例说明w i n d o w s 的消息机制。例中包括主控程序和底层程序。 2 2 主控程序的实现 ( 1 ) 新建一工程文件:s e n d e r ,选取m f ca p p w i z a r d ( e x e ) 。 ( 2 ) 第二步选取s i n g l ed o c u m e n t ( 单文档) 。 ( 3 ) 其余几步均为确省值。 ( 4 ) 添加三个菜单”命令一”、”命令二”、”命令三”及与之对应的函数: o n s e n d c o m m l ( ) c s t r i n gs t r = ”r e c e i v e r “; c w n d + p w n d = c w n d :f i n d w i n d o w ( n u l l ,s t r ) ; i f ( p w n d ) p w n a 一 s e n d m e s s a g e ( w m _ c o m m , o ,0 ) ; ) o n s e n d c o m m 2 ( ) ( c s t r i n gs t r = ”r e c e i v e r 匕 c w n d 。p w n d = c w n d :f i n d w i n d o w ( n u l l , s t r ) ; 现代编程方法中几项技术的研究与应用 i f ( p w n d ) p w n d - s e n d m e s s a g e ( w m _ c o m m ,0 ,1 ) ; o n s e n d c o m m 3 ( ) c s t r i n g s t f ”r e c e i v e r ”: c w n d + p w n d = c w n d :f i n d w i n d o w ( n u l l ,s t r ) i f ( p w n d ) p w n d 一 s e n d m e s s a g e ( w m _ c o m m , 1 ,o ) ; ) ( 5 ) 在s e n d e r v i e w h 中添加自定义消息:# d e f i n e w m _ c o m m w m u s e r + 1 0 0 编译完成即可。 2 3 底层工作程序的实现 ( 1 ) 新建工程r e c e i v e r , 仍是单文档。 ( 2 ) 在c r e c e i v e r a _ p p 类的i n i t i n s t a n c e o i 撇末尾添加 m _ p m a i n w n d - s e t w i n d o w t e x t ( ”r e c e i v e r ”) ; 用以指定底层工作程序的窗口标题,以便主控程序能根据标题获取到此窗口的窗 口句柄。 ( 3 ) 在m a i n f r m h 中添加自定义消息:# d e f i n e w m _ c o m m w m _ u s e r + 1 0 0 。 ( 4 ) 添加自定义消息w m _ c o m m 的消息映射: b e g i n _ m e s s a g e _ m a p ( c m a i n f r a m e ,c f r a m e w n d ) 现代编程方法中几项技术的研究与应用 o n w m c r e a t e o o nm e s s a g e ( w m _ c o m m , o n s e n d m s g ) e n d _ m e s s a g e _ m a p ( ) ( 5 ) 完成消息响应函数o n s e n d m s 9 0 v o i dc m m l l f r a m e :o n s e n d m s g ( w p a r a mw p a r a m , l p a r a m1 p a r a m ) i f ( w p a r a r n = = 0 & & l p a r a m = 0 1 a f x m e s s a g e b o x ( ”主控程序发送命令- - ! ”) : i f ( w p a r a m = = 0 & l p a r a m 1 ) a f x m e s s a g e b o x ( ”主控程序发送命令二! ) ; i f ( w p a r a m l & & l p a r a m 一- - - 0 ) a f x m e s s a g e b o x ( ”主控程序发送命令三! i i ) ; 通过辨别消息的两个消息参数可以区分主控程序发送的是哪一个命令从而 可以执行相应的操作。由于本程序采用的是s e n d m e s s a g e 0 所以当主控程序发送 消息给底层工作程序时,底层工作程序弹出响应的模式对话框,在没有关闭对话 框前此消息未处理完,s e n d m e s s a g e 0 也就没有执行完,所以主控程序里阻塞状 态,如改用p o s e m e s s a g e 0 则不会发生阻塞,具体选用哪个函数还应根据实际要 求灵活掌握。 小结 通过上面的实例可以看出利用消息进行进程间通信是一种便捷的方法。消 息结构中带有相应的信息,并在进程之间传递。用这种方法,进程间的数据交换 量不大却能完成相当的功能,上下层次有着明显的接口,上层和底层只通过这个 现代编程方法中几项技术的研究与应用 接口进行通讯,因此只要对上下层程序制定好详尽的协议便可编制出协调性很好 的软件控制系统。 第三章m f c 消息响应机制的剖析 概述: v c + 十的m f c 类库是w i n d o w s 下c + + 编程的一套最为流行的类库。m f c 的 框架结构大大方便了程序员的编程工作。它合理地封装了w i n 3 2a p 函数,并 设计了一套方便的消息映射机制。下面通过分析m f c 的消息响应机制,可以了 解m f c 是如何对w i n d o w s 的消息加以封装。 3 1w i n d o w s 程序消息机制的实现 w i n d o w s 的消息都是和线程相对应的。即w i n d o w s 会把消息发送给和该消 息相对应的线程。程序通过c - e t m e s s a g e 函数从和某个线程相对应的消息队列里 面把消息取出来并放到一个特殊的结构里面,一个消息的结构如前面所述是一个 如下的s t r u c 瓜e 。 t y p e d e f s t r e e tt a g m s g h w n d h w n d ; u i n t m e s s a g e ; 、 ,p ra m :w p a r a m ; l p a r a m l p a r a m ; d w o r d t i m e ; p o i n t p t ; m s g 其中h w n d 表示和窗口过程相关的窗口的旬柄,m e s s a g e 表示消息的i d 号, w p a r a m 和i p a r a m 表示和消息相关的参数,t i m e 表示消息发送的时间,p t 表示消 息发送时的鼠标的位置。 1 4 现代编程方法中几项技术的研究与应用 然后t r a n s l a t e m e s s a g e 函数用来把虚键消息翻译成字符消息并放到响应的消 息队列里面,最后d i s p a t c h m e s s a g e 函数把消息分发到相关的窗口过程。然后窗 口过程根据消息的类型对不同的消息进行相关的处理。用户需要在窗口过程中分 析消息的类型和跟消息一起的参数的含义,做不同的处理,相对比较麻烦,而 m f c 把消息调用的过程给封装起来,使用户能够通过c l a s s w i z a r d 方便的使用和 处理w i n d o w s 的各种消息。 3 2m f c 的消息实现机制 在m f c 的框架结构下,可以进行消息处理的类的头文件里面都会含有 d e c l a r e _ m e s s a g e _ m a p 0 宏。这里主要进行消息映射和消息处理函数的声 明。可以进行消息处理的类的实现文件里一般都含有如下的结构: b e r l i n _ m e s s a o em a p ( c i n h e d t c l a s s , c b a s e c l a s s ) e n d _ m e s s a g e _ m a p ( ) 这里主要进行消息映射的实现和消息处理函数的实现。 所有能够进行消息处理的类都是基于c c m d t a r g e t 类的,也就是说 c c m d t a r g e t 类是所有可以进行消息处理类的父类。c c m d t a r g e t 类是m f c 处理 命令消息的基础和核心。同时m f c 定义了下面的两个主要结构: a f xm s g m a pe n t r y s t r u c ta f x _ m s g m a p _ e n t r y ( u 1 n t n m e s s a g e ;w i n d o w sm e s s a g e u 1 n t n c o d e ;c o n t r o lc o d e o rw m _ n o t i f yc o d e u i n t n l d ; c o n t r o li d ( o r0f o rw i n d o w s m e s s a g e s ) u i n tn l a s t l d ;u s e df o re n t d e ss p e c i f y i n gar a n g eo f c o n t r o li d s u i n t n s i g ;s i g n a t u r et y p e ( a c t i o n ) o rp o i n t e r t om e s s a g e 撑 15 现代编程方法中几项技术的研究与应用 a f xp m s g p f n ;r o u t i n et oc a l l ( o rs p e c i a lv a l u e ) ) ; 和a f xm s g m a p s t r u c ta f x _ m s g m a p 群i f d e fa f x d l l c o n s ta f x _ m s g m a p + ( p a s c a l + p f n g e t b a s e m a p ) 0 c o n s ta f x _ m s g m a p + p b a s e m a p ; c o n s ta f x _ m s g m a p _ e n t r y + l p e n t r i e s ; 其中a f xm s g m a p _ e n t r y 结构包含了 一个消息的所有相关信息,其中 n m e s s a g e 为w i n d o w s 消息的d 号 n c o d e 为控制消息的通知码 h i d 为w i n d o w s 控制消息的d n l a s t i d 表示如果是一个指定范围的消息被映射的话 n l a s t l d 用来表示它的范围 n s i g 表示消息的动作标识 a f x _ p m s gp f n 它实际上是一个指向和该消息相应的执行函数的指针。 现代编程方法中几项技术的研究与应用 v o i dc i n h e r i t v i e w :o n l b u t t o n d o w n ( u i n t n f l a g s ,c p o i n tp o i n t ) t o d o :a d d y o u rm e s s a g e h a n d l e rc o d eh e r ea n d o rc a l ld e f a u l t c v i e w :o n l b u t t o n d o w n ( n f l a g s ,p o i n t ) ; j 注意这里c v i e w :o n l b u t t o n d o w n ( n f l a g s , p o i n t ) 实际上就是调用c w n d 的 d e f a u l t 0 方法。而d e f a u l t 0 方法所做的工作就是调用d e f w i n d o w p r o c 对消息进 行处理。这实际上是调用原来的窗口过程进行缺省的消息处理。 如果o n w n d m s g 方法没有对消息进行处理的话,就调用d e f w i n d o w p r o c 对 消息进行处理。这实际上是调用原来的窗口过程进行缺省的消息处理。 所以如果正常的消息处理的话,m f c 窗口类是完全脱离了原来的窗口过程, 用自己的一套体系结构实现消息的映射和处理。即先调用m f c 窗口类挂上去的 窗e l 过程,再调用原先的窗e l 过程。并且用户面对和消息相关的参数不再是死板 的w p a r a m 和l p a r a m ,而是和消息类型具体相关的参数。比如和消息 w m l b u t t o n d o w n 相对应的方法o n l b u t t o n d o w n 的两个参数是n f l a g s 和p o i n t 。 n f l a g s 表示在按下鼠标左键的时候是否有其他虚键按下,p o i n t 更简单,就是表 示鼠标的位置。 同时m f c 窗口类消息传递中还提供了两个函数,分别为 w a l k p r e t r a n s l a t e t r e e 和p r e t r a n s l a t e m e s s a g e 。利用m f c 框架生成的程序都是从 c w i n a p p 开始执行的,而c w i n a p p 实际继承了c w i n t h r e a d 类a 在c w i n t h r e a d 的运行过程中会调用窗口类中的w a l k p r e t r a n s l a t e t r e e 方法。而 w a l k p r e t r a n s l a t e t r e e 方法实际上就是从当前窗口开始查找愿意进行消息翻译的 类,直到找到窗口没有父类为止。在w a l k p r e t r a n s l a t e t r e e 方法中调用了 p r e t r a n s l a t e m e s s a g e 方法。p r e t r a n s l a t e m e s s a g e 最大的好处是在消息处理前可以 在这个方法里面先做一些事情。 18 现代编程方法中几项技术的研究与应用 举个简单的例子,比如希望在一个c e d i t 对象里,把所有的输入的字母都 以大写的形式出现,只需要在p r e t r a n s l a t e m e s s a g e 方法中判断m e s s a g e 是否为 w m _ c h a r , 如果是的话,把w p a r a m ( 表示键值) 由小写字母的值该为大写字母的 值就实现了这个功能。 小结 m f c 类库是w i n d o w s 下c + + 编程的类库。它合理地封装了w i n 3 2a p i 函数, 并设计了一套方便的消息映射机制。这套消息机制贯穿了整个m f c 类库运行的 始终。它建立了消息映射表,通过对收到的消息进行比较得到相应的句柄,进而 调用相应的操作。由于m f c 封装了底层的操作,对程序员来说消息映射表的建 立和修改都是十分便捷的。 在m f c 类库的应用中,各类之间的调用和数据交流都是通过将相应的消息 压入消息队列,在对消息队列中的消息进行分析后进行相关操作来实现的。 通过分析m f c 的消息响应机制,可以了解m f c 是如何对w i n d o w s 的消息 加以封装。同时可以进一步弄清消息运行机制的实质。 对m f c 类库的分析和了解,不仅能够使程序员更好的使用m f c 类库,同 时,对于我们自己设计和实现框架和类,无疑也有相当大的帮助。 1 9 现代编程方法中几项技术的研究与应用 第四章分布式计算机消息机制的剖析 引言: 拥有分布式计算资源的计算机网络己经十分普遍,在多种资源间的进行分 布式相关的处理不仅具有现实意义,而且还产生了比较急迫的要求。针对分布式 处理,下面简要介绍消息机制的核心概念、原理以及常见的具体实施方法。 4 1 概述 所有分布式计算环境的基础是计算机之间的通讯。这个过程是最基本的过 程,并且从概念上反映了的分布式环境和底层通讯模块的接近程度。让计算机和 其他计算机进行通讯的硬件以及系统级软件常常称作传输层。而当几个计算机使 用共伺的传输层相连时。他们就可以称为计算机网络。 网络上的信息传递过程和我们平时所使用的邮政信件传送过程是十分类似 的。就象一个邮包一样,网络上的信息也被打包,包中含有收信者和发信者的地 址,以及一些真正需要传送的自带信息,比如一条短消息等等,这些信息通过一 些具有邮发功能的机器进行传递。另外,和邮政信件一样,收到网络信息包的人 可以选择接受信息包,也可以不接受。 不过,不管是普通信件,或者是网络信息,如果超过了一定的大小限制, 那么他们就可能就会被分割成多个小部分。等到他们到达目的地的时候才再组合 起来。这些扶物理上分割的信息包,其实也可以被看作是具有独立逻辑的信息包。 一般来说,只要传输层中具有一定的语义、分组顺序、数据格式化和一系列其他 预定义的组件,就可以组成某种通讯协议。只要遵循这些预定义的协议,某一计 算机系统就能够正确解释来自其他计算机系统的信息。 4 2 同步和异步传输 和普通的邮件相同,信息发送者关注的信息接收者接受信息的情况,其侧重 点也各有不同。有时候,也许发送者根本就不需要关心信息是否到达了接收者处; 另一些时候,发送者需要确认信息已经到达了接收者处,但是不需要等到接受者 确认后才能继续下面的工作i 还有的时候,发送者必须等到接收者确认收到信息 2 0 现代编程方法中几项技术的研究与应用 之后才能往下进行工作。 同步模式的操作就是发送者必须接收到接收者的反馈后才能继续往下工作。 而不需要接受者反馈信息的工作模式,或者至少不需要接受者立即反馈的,就叫 做异步模式。这两种模式的区别通常决定了某种协议是不是适合某一特定任务。 通讯功能的核心部分通常是由操作系统和网络相关的a p i 函数提供。这两种 程序调用大量的通讯函数来完成实际的系统间数据的传输及接收。总的来说,这 些低层组件为底层的通讯模块提供了一定层次的抽象,同时也将更高层次的地址 标识和数据转换等功能留给高一层的服务模块。 4 3 分布式计算机中的消息和消息机制 分布式计算方式的消息包中包含了消息包的属性标志和具体信息。这样,消 息机制就要求服务器上必须要有一层中间处理层来确定消息的路由,以便让它到 达正确的接收者处。 消息机制是一种天生的异步机制,因为基于消息的通讯能够很好地和中间层 的路由配合。各个消息暂时存放在服务器或路由器上的消息队列中,在此队列中 他们等待着个或几个逻辑上的处理程序对其进行下一步处理。有些处理也许根 本就不需要响应某些消息,当然也可以直接反馈给客户端。但是,为了保持逻辑 上的抽象吻合,他们仍然需要给服务机发送一个消息,然后通过另一个队列路由 返回客户端。 基于消息的结构也可以采用同步模式。一般来讲,在这种模式中,服务器 路由器将消息直接传递给处理程序,然后由处理程序回传处理结果给服务器,再 由服务器传给客户端。 还有另外一种混合模式,在这种混合模式中,服务器如前述异步模式进行操 作,而客户机则采用同步模式。这种组合让服务器端获得了异步操作的高效率, 同时也让客户端从同步模式的简单处理机制和安全性上获得了好处。 现代编程方法中几项技术的研究与应用 4 4 可靠消息机制 可靠消息机制是一种消息传递机制。在可靠消息机制结构最顶部层面,很类 似于前面所提到的消息队列结构,但是在这个层次以下则有很大不同。 为了可靠地传递异步消息,人们采用了“存储转发”模式,在这个模式中, 需要传递的消息及其附带的地址信怠被同步地传入中间层,并在中间层永久存储 起来。一但消息进入这种存储状态,中间层就会千方百计地试图将消息发送到它 的目的地去,而发送进程此时就可以进行其他的处理。 用这种结构来传递消息的可靠性,在于当前消息持有者总是拥有一份这个消 息的永久拷贝,而在消息未转发到下一个目的地并获得接收确认之前,这个拷贝 就永远不会被删除。正因为通信链中的每一环都可以保证消息会成功传递到下一 站直到终点,所以最初的发送者可以假设:发送出去的消息都会顺利地抵达目的 地,那么,基于此假设,发送者就用不着再关心消息的后续情况,而可以直接进 行下面的工作了。由于这种结构的异步特性,如果发送者需要知道消息到达接收 者处的时刻或者具体细节,那么他仍然需要接收者对他反馈确认信息。 小结 的。 分布式计算机中消息机制的标准化体系分成两种情况来考虑:异步的和同步 同步模式的操作就是发送者必须接收到接收者的反馈后才能继续往下工作。 而不需要接受者反馈信息的工作模式,或者至少不需要接受者立即反馈的,就叫 做异步模式。这两种模式的区别通常决定了某种协议是不是适合某一特定任务。 对于异步通信来说,基于消息的体系常常是最为合适的。在某些情况下,由 于整个系统的可靠程度本身就比较高,所以消息传送的可靠性要求不是很高;对 于通讯双方来说,发送者不需要接收者的反馈信息,或者至少不需要接收者立即 反馈。 如果消息传送的可靠程度要求很高,那么,可以采用可靠的存储转发模式。 2 2 现代编程方法孛几项技术的研究与应用 在这种模式下,当前消息持有者总是拥有一份这个消息的永久拷贝。这个拷贝在 消息转发到下一个目的地并获得接收确认之后才会被删除。正因为通信链中的每 一环都可以保证消息会成功传递到下一站直到终点,所以发送出去的消息都会顺 利地抵达目的地。 在同步模式中,我们常常使用过程化的编程,实际中大量而广泛运用的具有 c 语言接口的体系在c 或者c + + 应用程序中十分易于使用。此时需要同步消息机 制。 在分布式计算机中消息的结构和消息的运行机制和前面的消息机制极为相 似,只是分布式计算机多了一些中间节点,所以它多了消息的存储转发机制。 现代编程方法中几项技术的研究与应用 第五章消息机制的模拟 5 1 消息机制的实质 由前几章对消息机制在各方面应用的分析,可以对消息机制的实质得出下面 的结论: 在基于消息运行机制的系统中,任何程序的调用和响应并不直接进行。而是 将消息发到消息队列,等待进行。这种方式将程序调用的要求和程序实际的运行 用消息机制分开,给编程带来很大的灵活性,并且可以解决一些特殊问题。 在消息运行机制中,消息是系统制定出来的一种特定结构。它包含了许多信 息,其中有发送者的信息,接收者的说明,以及相关操作等等。 在整个系统的运行中,各个模块之间交流的只是消息。而消息的运行是由消 息泵和消息队列驱动。这就是消息运行机制的基本原理。 5 2 单片机中已有的控制模式 在单片机控制中,为了减少多终端中断的相互冲突,最通用的做法是尽最缩 短中断服务程序的长度。一般只在中断服务程序中置上相应的标志位,然后在主 程序的循环中安排相应的处理程序。如下面程序伪码所示: 、,j i di n toi n t e r p u t0 s w i t c h ( ) c a s l e终端一申请中断 置标志1 : 现代编程方法中几项技术的研究与应用 c a s e终端二申请中断 置标志2 : b r e a k : c a s e终端三申请中断 置标志3 b r e a k : d e f a u r ; 在主循环中 w l l i l e ( 1 ) i f 标志1 t r u e ; 控制程序一 ) i f标志2 扣l e ; 现代编程方法中几项技术的研究与应用 控制程序二 ) i f 标志3 一- - - t r u e ; 控制程序三 ( ) j 如上面程序伪码所示,在中断中根据不同的终端申请中断,中断服务程序置 下不同的标志。在主循环中不断检测各个标志位,然后进入相应的控制程序 这种编程模式在一台主控机带多台终端的通讯中受到很大的限制。主要是: 1 、主机必须严格控制和终端的信息交流。 主机划定时问片轮询各个终端。即,在某一段时间内,主机明确的知道下 一个字节的数据是来自哪一个终端。这种完全由主机控制的编程方式很大程度上 限制了编程的方法。 2 、主机只是在一定程度上被动地接收终端发来的数据。 上面所示伪码中当程序运行在控制程序二中时,终端要求与主机通讯。 上面的程序构架只能部分满足这种需要。例如在中断中设置标志l ,当主程序运 行完控制程序二时,根据标志l 进入控制程序一运行。这种处置方式将对通讯的 终端和通讯的数据有些限制,特别对一些特殊情况无法处理。 例如:当程序运行在控制程序二中时,终端一要求与主机通讯。上面的程 序架构在中断设置标志1 ,当主机运行完控制程序二时,根据标志1 进入控制程 序一运行。但是在控制程序二结束之前终端三又申请中断,上面的程序构架构则 在中断中设置标志3 后放到主程序中处理,当主机处理完控制程序二之后标志1 2 6 现代编程方法中几项技术的研究与应用 和标志3 都被置位。程序的主循环只能按照事先设定好的顺序先查询标志3 后查 询标志l 。两个标志位都被置位。主机则先执行控制程序三后执彳亍控制程序一。 这样程序执行的先后与终端申请中断的顺序不符。如果系统要求分辨出两个终端 申请的先后顺序,则这种程序架构无法满足要求。 5 3 模拟消息机制地模拟 消息机制在单片机控制程序地引入,改变了程序的架构,可以解决上面的问 题。 下面是消息机制模拟的伪代码,用以解决前面提到的通讯过程中主机被动接 收时韵无序性问题。 u n s l g n e di n tf a r p o i n ; u n s i g n e di n tf l a g l ; u n s i g n e d i n tt e m p l = 0 ,t e m p o = o ,x x h = o ,x x l 2 0 ; u n s i g n e d i n tx 1 2 0 ,x h = o ,t e m p 3 = 0 ,t e m p 4 = o ; u n s i g n e d i m x x d l 5 0 0 ; u n s i g n e d i n tz h d h l = 0 ,z h d l l = o ,z h d h 0 2 0 ,z h d l o ;o ; c h a rz h d l 5 0 0 ,z h d o 5 0 0 ; u n s i g n e di n tt e m p ; u n s i g n e di n tjl = o , j 2 = o ; m a i n ( ) w h i l 1 ) ( i f ( x x l = 5 0 ) x x l 2 0 ;x l + + ;) 现代编程方法中几项技术的研究与应用 i f f x x l1 2 x x h ) + a d df l a gt ox x l = x x h + s w i t c h ( x x d l x x l ) e a s e l l : x x d l x x l 2 0 : x x l + + : z h d l o + + ; b r e a k i c a $ e 2 i x x d l x x l = o ; x x l 抖: z h d l l 什: b r e a k ; 1 ,率e n ds w i t c h ) e l s ei f ( f l a g l = = n i + + : ) e l s e x x h + + : ) * e n dw h i l e + ) v o i dc _ i n t 0 9 ( ) i f 消息来自终端一 ( x x d l x x h = 1 1 ; 现代编程方法中几项技术的研究与应用 x x h + + : i f ( x x h = 5 0 ) ( x x h = o ;x h + + ;) z h d o z h d h o = 2 0 : t e m p o + + ; 吐d h 0 + + :产+ , ) i f 消息来自终端二 x x d l x x h = 2 1 ; x x h + + : 。 i f ( x x h = 5 0 ) ( x x h = o ;x h + + ;) z h d l z h d h l = 5 0 ; t e m p l + + ; z h d h l + + : ) ) 在上面的伪代码中,为了模拟消息机制,系统设定了一个数组x x d i 口配以双 指针x x h 和x x l ,用来作消息队列。其中x x h 指针指向消息队列的头。每当有一 个消息进入,消息对列的x x h 指针加一。如果头指针x x h 指到x x d l 的尾时x x h 自动跳到x x d l 的头。另一个x x l 指针指向消息队列的尾。每个消息队列中的一 个消息被处理,x x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 储备干部面试题及答案
- java面试题及答案项目经验
- 消化系统疾病护理共同要点
- 保育员消毒培训
- 2025年中国木制小提琴弓行业市场全景分析及前景机遇研判报告
- 肿瘤科急诊的护理
- 中风中医护理病例讨论
- 中心静脉压测量护理查房
- 流程讲解规范实施指南
- 直肠癌术后引流管的护理
- 70岁以上的换领驾驶证三力测试题答案
- 药品售后服务承诺书
- 露天矿防火安全知识讲座
- 2024年山东烟台财金集团招聘笔试参考题库含答案解析
- GB/T 43234-2023成型模斜导柱
- 马工程版《中国经济史》各章思考题答题要点及详解
- 中建公路工程10T龙门吊安拆方案
- 2023年石狮市国企招聘考试基础题库
- OBE理念下的一流专业和课程建设
- 游戏俱乐部群公告范本
- 国家玩具安全技术规范
评论
0/150
提交评论