基于COM跨进程调用和共享内存的进程间通信方法和系统转让专利

申请号 : CN202110257312.0

文献号 : CN112631815B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 沈阳丽李志强刘曙元程睿君薛尚君

申请人 : 国能信控互联技术有限公司

摘要 :

基于COM跨进程调用和共享内存的进程间通信方法和系统,结合使用了COM跨进程调用技术和共享内存技术,首先调用端进程在共享内存中动态分配一块连续内存空间,将数据按特定格式放入此内存空间,然后将内存的起始偏移作为参数传递给相应的COM接口;COM通知被调用进程,被调用进程取得这个偏移并访问共享内存中的相应位置,按同样的格式取得数据,执行一定逻辑之后将结果仍放入该共享内存,并将控制权返回COM,调用端再次从共享内存中取得输出结果。本发明实现了高效传递大量数据的跨进程通信的功能。

权利要求 :

1.基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,所述进程间通信方法,包括以下步骤:

步骤1,调用端在共享内存中动态分配一块连续内存空间,将进程间需要传递的预设数据按设定格式放入此内存空间,然后将该内存空间的起始偏移量作为参数传递给相应的COM接口;在步骤1中,所述COM接口采取宏的机制来统一处理共享内存中的格式,通过类的构造函数自动计算格式内存占用总空间并动态分配共享内存;根据字段长度,自动计算偏移,根据偏移自动移动指针位置;当退出作用域时,通过类的析构函数自动释放分配的共享内存;所述调用端包括内存偏移单元,内存偏移单元用于标定共享内存在各个进程中加载时的不同起始偏移量;

步骤2,被调用端通过COM接口的参数得到共享内存起始位置,找到相应的位置后,按同样的格式解释所述内存空间,得内存空间中的数据,然后进行调用,调用完成后将输出参数仍放置在该共享内存中,返回给调用端,所述共享内存是预设数目的进程访问的同一块内存空间,共享内存也是一种进程间通信方式;

步骤3,调用端在完成调用后,从COM接口得到返回值,在共享内存中得到输出参数;

其中,COM为串行通讯端口。

2.根据权利要求1所述的基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,

在步骤1中,所述共享内存用于减小COM传输过程中数据复制的性能开销。

3.根据权利要求1所述的基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,

所述宏的机制中的宏定义依赖于预设数据字段个数,当数据字段个数不同时,宏定义有若干个;当数据字段个数相同时,可以重复利用同一个宏。

4.根据权利要求1所述的基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,

由于输出参数位于共享内存,共享内存的回收释放在调用端发送完回复报文之后。

5.根据权利要求1所述的基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,

在步骤1中,所述设定格式为将数据按顺序依次连续排列。

6.根据权利要求1所述的基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,

在步骤2中,被调用端采取对应的解释内存的宏定义。

7.根据权利要求1所述的基于COM跨进程调用和共享内存的进程间通信方法,其特征在于,

在步骤3中,所述输出参数位于共享内存内,共享内存的回收释放在发送完回复报文之后。

8.一种利用权利要求1‑7中任一权利要求所述基于COM跨进程调用和共享内存的进程间通信方法的进程间通信系统,所述系统包括动态分配模块、格式解释模块和输出参数模块,其特征在于:

所述动态分配模块中调用端在共享内存中动态分配一块连续内存空间,将进程间需要传递的数据按设定格式放入此内存空间,然后将内存的起始偏移作为参数传递给相应的COM接口;

所述格式解释模块中被调用端通过COM接口的参数得到共享内存起始位置,找到相应的位置后,按同样的格式解释这块内存,得到数据,然后进行调用,调用完成后将输出参数仍放置在该共享内存中,返回给调用端;

所述输出参数模块中调用端在完成调用后,从COM接口得到返回值,在共享内存中得到输出参数。

说明书 :

基于COM跨进程调用和共享内存的进程间通信方法和系统

技术领域

[0001] 本发明属于进程间通信及消息传输技术领域,涉及基于COM跨进程调用和共享内存的进程间通信方法和系统。

背景技术

[0002] 进程间通信就是在不同进程之间传播或交换信息,进程间通信不仅应用于操作系统、应用软件等领域,也应用于工业物联网、实时数据库等领域。
[0003] 现有进程间通信方法有:管道、消息队列等;但匿名管道只支持单向通信且只能在本地机器上,命名管道不能实现多进程通信;消息队列进行消息的复制时需要额外消耗CPU
的时间,不适宜于信息量大或操作频繁的场合。

发明内容

[0004] 为解决现有技术存在的问题,本发明的目的在于,提供了基于COM跨进程调用和共享内存的进程间通信方法和系统,既解决了跨网络跨进程的调用,又解决了进程间大量数
据传输的问题。
[0005] 本发明采用如下的技术方案:
[0006] 基于COM跨进程调用和共享内存的进程间通信方法,所述进程间通信方法,包括以下步骤:
[0007] 步骤1,调用端在共享内存中动态分配一块连续内存空间,将进程间需要传递的预设数据按设定格式放入此内存空间,然后将该内存空间的起始偏移量作为参数传递给相应
的COM接口;
[0008] 步骤2,被调用端通过COM接口的参数得到共享内存起始位置,找到相应的位置后,按同样的格式解释所述内存空间,得内存空间中的数据,然后进行调用,调用完成后将输出
参数仍放置在该共享内存中,返回给调用端,
[0009] 所述共享内存是预设数目的进程访问的同一块内存空间,共享内存也是一种进程间通信方式;
[0010] 步骤3,调用端在完成调用后,从COM接口得到返回值,在共享内存中得到输出参数;
[0011] 其中,COM为串行通讯端口。
[0012] 在步骤1中,使用共享内存用于减小COM传输过程中数据复制的性能开销。
[0013] 在步骤1中,所述调用端包括内存偏移单元,内存偏移单元用于标定共享内存在各个进程中加载时的不同起始偏移量。
[0014] 在步骤1中,所述COM接口采取宏的机制来统一处理共享内存中的格式,具体的:
[0015] 通过类的构造函数自动计算格式内存占用总空间并动态分配共享内存;
[0016] 根据字段长度,自动计算偏移,根据偏移自动移动指针位置;
[0017] 当退出作用域时,通过类的析构函数自动释放分配的共享内存。
[0018] 所述宏的机制中的宏定义依赖于预设数据字段个数,因数据字段个数不同,宏定义有若干个;数据字段个数相同的可以重复利用同一个宏。
[0019] 由于输出参数位于共享内存,共享内存的回收释放在调用端发送完回复报文之后。
[0020] 在步骤1中,所述设定格式为将数据按顺序依次连续排列。
[0021] 在步骤2中,被调用端采取对应的解释内存的宏定义。
[0022] 在步骤3中,所述输出参数位于共享内存内,共享内存的回收释放在发送完回复报文之后。
[0023] 基于COM跨进程调用和共享内存的进程间通信方法的进程间通信系统,所述系统包括动态分配模块、格式解释模块和输出参数模块,
[0024] 所述动态分配模块中调用端在共享内存中动态分配一块连续内存空间,将进程间需要传递的数据按设定格式放入此内存空间,然后将内存的起始偏移作为参数传递给相应
的COM接口;
[0025] 所述格式解释模块中被调用端通过COM接口的参数得到共享内存起始位置,找到相应的位置后,按同样的格式解释这块内存,得到数据,然后进行调用,调用完成后将输出
参数仍放置在该共享内存中,返回给调用端;
[0026] 所述输出参数模块中调用端在完成调用后,从COM接口得到返回值,在共享内存中得到输出参数。
[0027] 与现有技术相比,本发明的有益效果在于:
[0028] 本发明采用的COM技术实现了跨进程通信;采用的共享内存技术实现了COM调用时传递需要或返回的大量数据的功能,且减少了COM传输过程中数据复制的性能开销。本发明
提供了一种既能进程间高效通信又能传输大量数据的方法。

附图说明

[0029] 图1是本发明基于COM跨进程调用和共享内存的进程间通信方法的流程示意图;
[0030] 图2是本发明基于COM跨进程调用和共享内存的进程间通信的实施例流程示意图;
[0031] 图3是本发明基于COM跨进程调用和共享内存的进程间通信系统的具体结构示意图。

具体实施方式

[0032] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述。本申请所描述的实施例仅仅是本发明一部
分的实施例,而不是全部实施例。基于本发明精神,本领域普通技术人员在没有做出创造性
劳动前提下所获得的所有其它实施例,都属于本发明的保护范围。
[0033] 下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0034] 如图1所示,一种基于COM跨进程调用和共享内存的进程间通信方法,该方法结合使用了COM跨进程调用技术和共享内存技术。
[0035] 步骤1,调用端在共享内存中动态分配一块连续内存空间,将进程间需要传递的数据按设定格式放入此内存空间,然后将内存的起始偏移作为参数传递给相应的COM接口;
[0036] 步骤2,被调用端通过COM接口的参数得到共享内存起始位置,找到相应的位置后,按同样的格式解释这块内存,得到步骤1中所述的数据,然后进行调用,调用完成后将输出
参数仍放置在该共享内存中,返回给调用端;
[0037] 步骤3,调用端在完成调用后,从COM接口得到返回值,在共享内存中得到输出参数;
[0038] 其中,COM为串行通讯端口;共享内存是多个进程可以访问的同一块内存空间,也是一种进程间通信方式。
[0039] COM接口采取宏的机制来统一处理共享内存中的格式,宏需要实现以下三个功能:
[0040] 第一,自动计算格式内存占用总空间并动态分配共享内存,此功能可通过类的构造函数完成;
[0041] 第二,根据字段长度,自动计算偏移,根据偏移自动移动指针位置;
[0042] 第三,当退出作用域时,自动释放分配的共享内存,此功能可通过类的析构函数完成。
[0043] COM通知被调用进程,被调用进程取得这个偏移并访问共享内存中的相应位置,按同样的格式取得数据,执行一定逻辑之后将结果仍放入该共享内存,并将控制权返回COM,
调用端再次从共享内存中取得输出结果,返回给客户端。
[0044] 如图2所示,以实时数据库的写快照调用过程为例(putsnapshots),首先网络服务进程(server)在共享内存中动态分配一块连续内存空间(偏移为position),将数据按特定
格式放入(如:将count,ids,datetimes,ms,values,states,qualities,errors的值依次连
续放入)此内存空间,之后以偏移量position为参数调用COM接口;快照服务进程
(snapshot)在得到通知后取得这个偏移,并访问共享内存中的相应位置,按同样的格式取
得数据,执行写快照的逻辑之后将结果(ecode,count,errors)仍放入该共享内存,并将控
制权返回调用线程,网络服务进程(server)再次从共享内存中取得输出结果,图2中的序号
说明了各种调用的先后次序。
[0045] 本申请还同时公开了一种基于前述基于COM跨进程调用和共享内存的进程间通信方法的进程间通信系统,具体结构如图3所示,包括动态分配模块、格式解释模块和输出参
数模块,
[0046] 动态分配模块中调用端在共享内存中动态分配一块连续内存空间,将进程间需要传递的数据按设定格式放入此内存空间,然后将内存的起始偏移作为参数传递给相应的
COM接口;
[0047] 格式解释模块中被调用端通过COM接口的参数得到共享内存起始位置,找到相应的位置后,按同样的格式解释这块内存,得到数据,然后进行调用,调用完成后将输出参数
仍放置在该共享内存中,返回给调用端;
[0048] 输出参数模块中调用端在完成调用后,从COM接口得到返回值,在共享内存中得到输出参数。
[0049] 最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然
可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何
修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。