Paramics插件编程进程间通讯
一.进程间通讯
进程间的通讯,包括数据的交换与共享是一项实用的技术,多应用在大型系统中,一个大型的系统往往由多个程序部件组成,部件的形式是多种多样的,可以是动态链接库(DLL)、Activex组件或控件,也可以是独立运行的程序。因此,在系统运行时各相关程序部件必然需要进行大量频繁的数据交换操作。动态链接库(DLL)与其主调应用程序之间的数据交换是非常容易实现的,但在两个应用程序之间,或是动态链接库与其主调应用程序之外的其他应用程序进行数据交换,就需要使用进程间通讯(interprocess comunication, IPC)技术。
有多种方法可以实现基于Windows的IPC技术。按照进程间的通讯是否需要网络支持,即需要通讯的进程是处于同一台计算机还是处于网络中的不同计算机上,基于Windows的IPC实现技术可以分为两大类,如表1所列。
当进程间的数据交换与共享操作发生在本机,且通讯的数据量大、实时性要求高时,共享内存与文件映射方法有着明显的优势:该方法通过直接操作内存映射文件来进行,而内存映射文件又是进行单机数据共享的最低层机制,因此使用共享内存与文件映射可以较小的开销获取较高的性能,是单机进行大数据量快速交换的最佳方案。
二.Windows消息传递技术
Windows操作系统采用了消息驱动的体系结构。如同人体的循环系统一样,消息及其循环机制在Windows中扮演着重要的角色,正是通过不间断的消息流以及各类消息处理函数,使操作系统及各种应用程序得以完成各类(包括系统内部与外部应用要求的)传递与处理。
Windows中定义了大量的标准消息类型,用户只要在自己的程序中编写相应的消息处理函数,就可以按自己的实际需要处理该消息。更重要的是,Windows支持自定义消息类型,用户可以更加灵活地在需要的时编写自己的消息。由于自定义消息可以是全局的(可以在进程间传递),所以它可以与上述的共享内存与文件映射方法结合起来使用,起到一个数据操作信号发生的作用,高效地解决进程间数据通讯的问题。
三.通讯机制原理与设计
通过对Paramics插件及其API和基于Windows的进程间通讯及消息传递技术的分析,结合它们各自的特点,提出了以下的通讯机制,如图1所示。
由图1可以看出,在通讯机制中,Paramics插件与外部应用程序分别是两个独立的进程;通过开辟一段共享内存区域,建立了两个进程间需要交换及共享的数据存放空间;机制中利用了基于Windows的消息传递技术,作为两个进程间对同一共享内存区域数据读写操作的信号。因此,外部应用程序不需主动频繁地去轮询共享内存区域的数据是否更新,而只需在捕获到相应消息时进行处理。这样大大减轻了计算机处理器的负荷,提高了程序运行效率。
四.通讯机制的实现流程
上述的通讯机制,在一定程度上类似于C/S(client/server)模型。两个独立的进程可以看作是客户端或是服务端的一方,数据存储于一段共享的内存区域,而激发双方操作处理的手段是Windows消息。因此,实现通讯机制的主要流程包括了服务端及客户端的流程,按照实际需要,Paramics插件与外部应用程序可以作为客户端也可以作为服务端,或者同时为客户端和服务端。图2给出了Paramics插件作为服务端,外部应用程序作为客户端的流程。
在Paramics插件(服务端)编程中,首先要注册自定义消息。需要注意的是,需要创建的是全局消息,必须使用Windows的API函数Register Message();在仿真过程进行中,插件将完成一系列的常规处理,当满足一定条件时,程序将需要交换及共享的数据写入共享内存,并发送消息,通知外部应用程序(客户端)进行读取并进行处理。
外部程序(客户端)通过相应的消息处理函数进行响应,包括读取共享内存的数据,并进行同步处理。在消息处理函数中的数据处理不宜太复杂,如果需要对数据进行复杂的计算,可以交由消息处理过程以外的过程进行异步数据处理。
原文参考:http://blog.sina.com.cn/s/blog_5df6f1160100gfuc.html