进程间通信IPC的实现方法和装置制造方法及图纸

技术编号:19744860 阅读:26 留言:0更新日期:2018-12-12 04:40
本发明专利技术公开了进程间通信IPC的实现方法和装置。所述方法包括:在用于进程间通信的共享内存中注册与自身对应的IPC对象;将消息发送给与通信目标对应的IPC对象,和/或通过与自身对应的IPC对象接收通信目标发送的消息。该技术方案的有益效果在于,应用程序的所有IPC可以在一块共享内存中进行,不需要如现有技术中每进行一次IPC就新申请一块共享内存,能够解决效率低下并且容易带来内存管理的复杂度增加的问题;并且一个进程的多个线程都可以在这块共享内存中实例化自己的IPC对象,使得通信互不干扰并且效率提升。

【技术实现步骤摘要】
进程间通信IPC的实现方法和装置
本专利技术涉计算机
,具体涉及进程间通信IPC的实现方法和装置。
技术介绍
IPC(Inter-ProcessCommunication,进程间通信)在目前的应用程序中被广泛使用,一个简单的例子就是许多程序都有一个与主窗口对应的进程和一个与任务栏中托盘对应的进程,二者的交互是非常频繁的。现有技术中的IPC实现方式,效率并不高,需要占用大量内存,需要进行改进。
技术实现思路
鉴于上述问题,提出了本专利技术以便提供一种克服上述问题或者至少部分地解决上述问题的进程间通信IPC的实现方法和装置。依据本专利技术的一个方面,提供了一种进程间通信IPC的实现方法,包括:在用于进程间通信的共享内存中注册与自身对应的IPC对象;将消息发送给与通信目标对应的IPC对象,和/或通过与自身对应的IPC对象接收通信目标发送的消息。可选地,所述在用于进程间通信的共享内存中注册与自身对应的IPC对象包括:获取与自身对应的IPC对象的唯一标识;根据所述唯一标识和自身预设的回调函数,注册与自身对应的IPC对象。可选地,所述获取与自身对应的IPC对象的唯一标识包括:根据自身所属进程的类型,获取随机分配的唯一标识,或者获取预留的唯一标识。可选地,所述在用于进程间通信的共享内存中注册与自身对应的IPC对象包括:判断是否已存在用于进程间通信的共享内存;是则使用该用于进程间通信的共享内存,否则申请用于进程间通信的共享内存。可选地,所述申请用于进程间通信的共享内存包括:使用伙伴算法管理所述共享内存;在所述共享内存中设置头部区域,以存放所述伙伴算法的头部信息和各IPC对象的共用信息。可选地,所述在用于进程间通信的共享内存中注册与自身对应的IPC对象包括:判断所述共享内存中是否存在与该IPC对象对应的预留空间,是则将所述IPC对象的注册信息写入所述预留空间,否则在所述共享内存中为该IPC对象新分配空间。可选地,所述将消息发送给与通信目标对应的IPC对象包括:判断通信目标对应的IPC对象是否已在所述共享内存中注册;是则将所述消息写入通信目标对应的IPC对象的消息队列;否则判断所述共享内存中是否存在与通信目标对应的IPC对象对应的预留空间,是则将所述消息写入与该预留空间对应的消息队列,否则在所述共享内存中为所述通信目标对应的IPC对象申请预留空间,将所述消息写入与该预留空间对应的消息队列。可选地,该方法还包括:为发送的消息设置存活时间;若发送的消息未在存活时间内被通信目标获取,则从相应的消息队列中删除该发送的消息。可选地,该方法还包括:获取待传递参数的参数类型;根据所述参数类型,从预设的数据封装模板中选取出匹配的数据封装模板;将待传递参数按匹配的数据封装模板封装为对指定类型的数据对象;将所述指定类型的数据对象按预设方法序列化为二进制数据,将所述二进制数据作为待发送的消息。可选地,所述预设方法是利用包含嵌套模板的可变参数模板实现的。可选地,所述根据所述参数类型,从预设的数据封装模板中选取出匹配的数据封装模板包括:利用类型萃取确定待传递参数中各参数的参数类型;所述将待传递参数按匹配的数据封装模板封装为对指定类型的数据对象包括:若参数类型为标量类型,则直接封装参数的值;若参数类型为结构体,则建立对参数的引用,对所述引用进行封装。可选地,所述参数类型包括如下的一种或多种:基本类型、自定义类、智能指针、vector、map。依据本专利技术的另一方面,提供了一种进程间通信IPC的实现装置,包括:预处理单元,适于在用于进程间通信的共享内存中注册与自身对应的IPC对象;通信单元,适于将消息发送给与通信目标对应的IPC对象,和/或通过与自身对应的IPC对象接收通信目标发送的消息。可选地,所述预处理单元,适于获取与自身对应的IPC对象的唯一标识;根据所述唯一标识和自身预设的回调函数,注册与自身对应的IPC对象。可选地,所述预处理单元,适于根据自身所属进程的类型,获取随机分配的唯一标识,或者获取预留的唯一标识。可选地,所述预处理单元,适于判断是否已存在用于进程间通信的共享内存;是则使用该用于进程间通信的共享内存,否则申请用于进程间通信的共享内存。可选地,所述预处理单元,适于使用伙伴算法管理所述共享内存;在所述共享内存中设置头部区域,以存放所述伙伴算法的头部信息和各IPC对象的共用信息。可选地,所述预处理单元,适于判断所述共享内存中是否存在与该IPC对象对应的预留空间,是则将所述IPC对象的注册信息写入所述预留空间,否则在所述共享内存中为该IPC对象新分配空间。可选地,所述通信单元,适于判断通信目标对应的IPC对象是否已在所述共享内存中注册;是则将所述消息写入通信目标对应的IPC对象的消息队列;否则判断所述共享内存中是否存在与通信目标对应的IPC对象对应的预留空间,是则将所述消息写入与该预留空间对应的消息队列,否则在所述共享内存中为所述通信目标对应的IPC对象申请预留空间,将所述消息写入与该预留空间对应的消息队列。可选地,所述通信单元,适于为发送的消息设置存活时间;若发送的消息未在存活时间内被通信目标获取,则从相应的消息队列中删除该发送的消息。可选地,所述预处理单元,还适于获取待传递参数的参数类型;根据所述参数类型,从预设的数据封装模板中选取出匹配的数据封装模板;将待传递参数按匹配的数据封装模板封装为对指定类型的数据对象;将所述指定类型的数据对象按预设方法序列化为二进制数据,将所述二进制数据作为待发送的消息。可选地,所述预设方法是利用包含嵌套模板的可变参数模板实现的。可选地,所述预处理单元,适于利用类型萃取确定待传递参数中各参数的参数类型;若参数类型为标量类型,则直接封装参数的值;若参数类型为结构体,则建立对参数的引用,对所述引用进行封装。可选地,所述参数类型包括如下的一种或多种:基本类型、自定义类、智能指针、vector、map。依据本专利技术的又一方面,提供了一种智能终端,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上述任一所述的方法。依据本专利技术的再一方面,提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如上述任一所述的方法。由上述可知,本专利技术的技术方案,通过在用于进程间通信的共享内存中注册与自身对应的IPC对象,可以实现将消息发送给与通信目标对应的IPC对象,和/或通过与自身对应的IPC对象接收通信目标发送的消息。该技术方案的有益效果在于,应用程序的所有IPC可以在一块共享内存中进行,不需要如现有技术中每进行一次IPC就新申请一块共享内存,能够解决效率低下并且容易带来内存管理的复杂度增加的问题;并且一个进程的多个线程都可以在这块共享内存中实例化自己的IPC对象,使得通信互不干扰并且效率提升。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,而可依照说明书的内容予以实施,并且为了让本专利技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本专利技术的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为本文档来自技高网...

【技术保护点】
1.一种进程间通信IPC的实现方法,包括:在用于进程间通信的共享内存中注册与自身对应的IPC对象;将消息发送给与通信目标对应的IPC对象,和/或通过与自身对应的IPC对象接收通信目标发送的消息。

【技术特征摘要】
1.一种进程间通信IPC的实现方法,包括:在用于进程间通信的共享内存中注册与自身对应的IPC对象;将消息发送给与通信目标对应的IPC对象,和/或通过与自身对应的IPC对象接收通信目标发送的消息。2.如权利要求1所述的方法,其中,所述在用于进程间通信的共享内存中注册与自身对应的IPC对象包括:获取与自身对应的IPC对象的唯一标识;根据所述唯一标识和自身预设的回调函数,注册与自身对应的IPC对象。3.如权利要求2所述的方法,其中,所述获取与自身对应的IPC对象的唯一标识包括:根据自身所属进程的类型,获取随机分配的唯一标识,或者获取预留的唯一标识。4.如权利要求1所述的方法,其中,所述在用于进程间通信的共享内存中注册与自身对应的IPC对象包括:判断是否已存在用于进程间通信的共享内存;是则使用该用于进程间通信的共享内存,否则申请用于进程间通信的共享内存。5.一种进程间通信IPC的实现装置,包括:预处理单元,适于在用于进程间通信的共享内存中注册与自身对应的IPC对象;通信...

【专利技术属性】
技术研发人员:赵肖勇康高杰
申请(专利权)人:北京奇虎科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1