引言
进程间的数据交换和共享是一种非常重要和实用的技术。大、中型软件的开发
设计多是由众多程序设计人员的合作完成,通常一个程序设计人员只负责其中一个
或几个模块的开发,这些模块可以是动态链接库也可以是应用程序或是其他形式的
程序组件。
这些独立开发出来的程序模块最终需要作为一个整体来运行,即组成一个系统,在
系统运行期间这些模块往往需要频繁地进行数据交换和数据共享,对于动态链接库
同其主调应用程序之间的数据交换是非常容易实现的,但是在两个应用程序之间或
是动态链接库同其主调应用程序之外的其他应用程序进行数据交换就比较困难了。
尤其是在交换数据量过大、交换过于频繁的情况下更是难以实现,本文即对此展开
讨论,并提出了一种通过共享内存来实现进程见大数据量快速交换的一种方法。
通讯方式的比较和选择
进程间通讯的方式有很多,常用的有共享内存、命名管道和匿名管道、发送消
息等几种方法来直接完成,另外还可以通过 socket 口、配置文件和注册表等来间接
实现进程间数据通讯任务。以上这几种方法各有优缺点,具体到在进程间进行大数
据量数据的快速交换问题上,则可以排除使用配置文件和注册表的方法;另外,由
于管道和 socket 套接字的使用需要有网卡的支持,因此也可以不予考虑。这样,可
供选择的通讯方式只剩下共享内存和发送消息两种。由于数据量比较大,这样在使
用消息进行通讯时就无法通过消息参数将数据直接携带到接收方,只能以地址传送
的方式进行。当一个应用程序向另一个应用程序发送数据时将会发出
WM_COPYDATA 系统消息,因此可以考虑通过向消息队列插入 WM_COPYDATA
消息的方法来实现数据在进程间的拷贝。
在使用 WM_COPYDATA 消息时,由第一个消息参数指定发送窗口的句柄,第
二个消息参数则为一同数据相关的数据结构 COPYDATASTRUCT 的指针,此结构
原形声明如下: