一种跨进程回调的实现方法与流程

文档序号:23992057发布日期:2021-02-20 13:46阅读:210来源:国知局
一种跨进程回调的实现方法与流程

[0001]
本发明涉及计算机进程回调技术领域,更具体地涉及一种跨进程回调的实现方法。


背景技术:

[0002]
随着计算机技术的高速发展,软件的复杂度也越来越高,为了提高软件运行的稳定性,通常会把多个功能独立成单独的exe应用程序,以提高程序运行时的稳定性,但同时又因为涉及到交互时用户交互的多样性,有些数据需要通过服务向界面层发送回调,且界面层需要根据用户的选择返回给具体的服务程序,但使用传统回调技术进行跨进程通信和异步,会比较困难,因此,有必要提供一种跨进程回调的实现方法,以克服上述问题。


技术实现要素:

[0003]
本发明提供了一种跨进程回调的实现方法,以解决目前使用传统回调技术进行跨进程通信和异步,会比较困难的问题。
[0004]
为解决上述技术问题,本发明所采用的技术方案是:一种跨进程回调的实现方法,包括如下步骤:
[0005]
步骤s1.创建进程a,进程a为主进程;创建进程b,进程b为副进程;
[0006]
步骤s2.进程a启动,进程a创建并初始化共享内存,创建全局事件对象;
[0007]
步骤s3.当收到来自进程a的跨进程回调,回调参数写入到共享内存,将事件类型写入到共享内存;
[0008]
步骤s4.进程a给进程b发送通知,等待进程b全局事件对象返回;
[0009]
步骤s5.进程b启动,进入等待全局事件状态,当收到a发送的通知,判断是否为退出事件;
[0010]
步骤s6.若为退出事件,则退出,进程b结束;若不是退出事件,则判断首次启动进程b时,共享内存中是否有未处理的事件操作;
[0011]
步骤s7.若没有未处理的事件操作,则进程b进入等待通知状态,当进程b收到通知,从共享内存中获取事件类型;若有未处理的事件操作,则从共享内存中获取事件类型;
[0012]
步骤s8.根据事件类型进入不同的事件流程,根据事件类型从共享内存中获取此事件对应的数据,处理并将返回值写入到共享内存,设置事件状态为完成,返回继续等待全局事件状态;
[0013]
步骤s9.进程a判断是否返回超时,若超时,则设置错误码并返回,进程a结束;若不超时,则从共享内存中获取返回值,进程a结束。
[0014]
进一步地,进程a为工作线程。
[0015]
进一步地,进程b为界面进程或辅助进程。
[0016]
进一步地,步骤s2中,进程a创建全局共享内存,并按固定的数据结构进行初始化。
[0017]
进一步地,步骤s2中,初始化过程中,进行数据块的区分。
[0018]
进一步地,步骤s2中,根据数据块的类型、逻辑偏移和大小,来进行数据块的区分。
[0019]
进一步地,步骤s4中,进程a有两种方式给进程b发送通知,一是能够即时响应的socket套接字方式的跨进程通知方式;二是能够异步处理事件的全局事件通知方式。
[0020]
进一步地,全局事件通知方式的步骤包括:
[0021]
a1.进程a启动并创建全局的事件对象,并将此全局事件对象的访问权限设置为everyone。
[0022]
进一步地,全局事件通知方式的步骤还包括:
[0023]
a2.进程b第一次启动,打开全局事件对象成功;
[0024]
a3.从全局共享内存中获得指定类型的数据。
[0025]
进一步地,全局事件通知方式的步骤还包括:
[0026]
a4.根据从全局共享内存中获取到的事件类型进行对应的处理并设置返回结果;
[0027]
a5.进程b设置消息处理的完成状态。
[0028]
与现有技术相比,本发明具有以下有益效果:本发明的跨进程回调的实现方法通过创建进程a,创建进程b;创建并初始化共享内存;创建全局事件对象;即通过共享内存管理和信号管理,信号管理为跨进程的通知方式,即进程a和进程b的相互通知方式,共享内存管理为进程a和进程b的公共内存,进程a和进程b通过共享内存实现数据交互,即本发明通过共享内存管理和信号管理实现了跨进程回调。本发明具有简单快捷、准确有效的特点。
附图说明
[0029]
图1为本发明的一种跨进程回调的实现方法的步骤示意图。
[0030]
图2为本发明的一种跨进程回调的实现方法的进程a的流程图的示意图。
[0031]
图3为本发明的一种跨进程回调的实现方法的进程b的流程图的示意图。
具体实施方式
[0032]
下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。
[0033]
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
[0034]
下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。
[0035]
请参阅图1至图3,图中所示者为本发明所选用的实施例结构,此仅供说明之用,在专利申请上并不受此种结构的限制。
[0036]
实施例一
[0037]
如图1、图2和图3所示,一种跨进程回调的实现方法,包括如下步骤:
[0038]
步骤s1.创建进程a,进程a为主进程;创建进程b,进程b为副进程;
[0039]
步骤s2.进程a启动,进程a创建并初始化共享内存,创建全局事件对象;
[0040]
步骤s3.当收到来自进程a的跨进程回调,回调参数写入到共享内存,将事件类型写入到共享内存;
[0041]
步骤s4.进程a给进程b发送通知,等待进程b全局事件对象返回;
[0042]
步骤s5.进程b启动,进入等待全局事件状态,当收到a发送的通知,判断是否为退出事件;
[0043]
步骤s6.若为退出事件,则退出,进程b结束;若不是退出事件,则判断首次启动进程b时,共享内存中是否有未处理的事件操作;
[0044]
步骤s7.若没有未处理的事件操作,则进程b进入等待通知状态,当进程b收到通知,从共享内存中获取事件类型;若有未处理的事件操作,则从共享内存中获取事件类型;
[0045]
步骤s8.根据事件类型进入不同的事件流程,根据事件类型从共享内存中获取此事件对应的数据,处理并将返回值写入到共享内存,设置事件状态为完成,返回继续等待全局事件状态;
[0046]
步骤s9.进程a判断是否返回超时,若超时,则设置错误码并返回,进程a结束;若不超时,则从共享内存中获取返回值,进程a结束。
[0047]
进程a为工作线程。
[0048]
进程b为界面进程或辅助进程。
[0049]
步骤s2中,进程a创建全局共享内存,并按固定的数据结构进行初始化。
[0050]
步骤s2中,初始化过程中,进行数据块的区分。
[0051]
步骤s2中,根据数据块的类型、逻辑偏移和大小,来进行数据块的区分。
[0052]
步骤s4中,进程a有两种方式给进程b发送通知,一是能够即时响应的socket套接字方式的跨进程通知方式;二是能够异步处理事件的全局事件通知方式。
[0053]
全局事件通知方式的步骤包括:
[0054]
a1.进程a启动并创建全局的事件对象,并将此全局事件对象的访问权限设置为everyone。
[0055]
a2.进程b第一次启动,打开全局事件对象成功;
[0056]
a3.从全局共享内存中获得指定类型的数据。
[0057]
a4.根据从全局共享内存中获取到的事件类型进行对应的处理并设置返回结果;
[0058]
a5.进程b设置消息处理的完成状态。
[0059]
实施例二
[0060]
本实施例为实施例一的进一步具体化的技术方案。
[0061]
本发明包括如下两大部分,共享内存管理部分和信号管理部分,以下是共享内存管理部分:
[0062]
进程a创建全局共享内存,并按固定的数据结构进行初始化,数据结构如下:
[0063][0064]
创建共享内存的算法是:需要的数据块数量加上每个数据块需要的大小:
[0065]
上述对块进行区分主要是为了便于程序在调用时将对应的数据写入到对应的数据块中,以方便另外的进程在共享内存中拿到需要处理的数据和设置结果返回。
[0066]
根据不同的调用将数据拷贝到指定的共享内存,例如需要用户在进程b中输入密码,且进程b确定后,进程a需要知道用户输入的密码,具体内容步骤如下:
[0067]
a)进程a首先收到需要用户输入密码的操作,进程a将需要输入密码这个操作写入到之前初始化的共享内存的m_nodesize[mem_callbak]内存段中;
[0068]
b)进程a将这个操作的类型写入到共享内存中;
[0069]
c)进程a通知进程b;
[0070]
d)进程b收到进程a的通知后从共享内存中首先获取出此次操作的类型,然后再根据操作类型从共享内存中获取到这个操作从进程a中传入的数据;
[0071]
e)进程b与用户交互,并将用户的结果返回写到共享内存的m_nodesize[mem_result]内存段中;
[0072]
f)进程b设置全局事件对象,进程a继续执行;
[0073]
g)进程a从m_nodesize[mem_result]中获得进程b中返回的数据,进程a继续执行。
[0074]
以下是信号管理部分:
[0075]
跨进程的通知部分使用了两种方式:一、能够即时响应的socket套接字方式的跨进程通知方式;二、能够异步处理事件的全局事件通知方式。
[0076]
a)全局事件通知方式用于软件第一次打开的时候,因为跨进程的消息传递存在异步的问题,即进程a可能已经运行了十分钟,这个时候进程a中已经有一些需要回显或交互的数据,这个时候再启动进程b,进程b会根据全局事件对象判断是否有需要交互的消息,如果有则从上述所说的步骤中取得数据,步骤如下:
[0077]
进程a启动并创建全局的事件对象,并将此全局事件对象的访问权限设置为everyone,因为此全局对象可能需要跨session的访问;
[0078]
b)进程b第一次启动,打开全局事件对象成功;
[0079]
c)从全局共享内存中获得指定类型的数据;
[0080]
d)根据从全局共享内存中获取到的事件类型进行对应的处理并设置返回结果;
[0081]
e)进程b设置消息处理的完成状态。
[0082]
如果进程a与进程b同时在运行的情况则使用socket方式直接通信,步骤如下:
[0083]
进程b开启socket,且置于等待状态;
[0084]
a)进程a根据以上设置好跨进程的数据到共享内存后使用socket通知进程b;
[0085]
b)进程b收到来自socket的消息后作出对应的处理,并将处理的结果设置到共享内存的m_nodesize[mem_result]内存段中;
[0086]
c)进程b设置消息处理的完成状态。
[0087]
共享内存:该模块主要负责跨进程通信的数据存储和结果返回的存储。
[0088]
全局事件模块:该模块主要负责进程b第一次启动判断是否有需要处理的数据。
[0089]
网络模块:该模块主要负责进程a与进程b的直接通信。
[0090]
实施例三
[0091]
一种跨进程回调的实现方法,包括如下步骤:
[0092]
步骤s1.创建进程a,进程a为主进程;创建进程b,进程b为副进程;
[0093]
步骤s2.进程a启动,进程a创建并初始化共享内存,创建全局事件对象;
[0094]
步骤s3.当收到来自进程a的跨进程回调,回调参数写入到共享内存,将事件类型写入到共享内存;
[0095]
步骤s4.进程a给进程b发送通知,等待进程b全局事件对象返回;
[0096]
步骤s5.进程b接收进程a传递的通知,通知中包括进程b的统一资源定位符url参数和进程a的应用程序标识appid参数;根据url参数调用进程b,并根据appid参数在进程b的显示界面建立快速回调到进程a的图标;进程b启动,进入等待全局事件状态,当收到a发送的通知,判断是否为退出事件;
[0097]
步骤s6.若为退出事件,则退出,进程b结束;若不是退出事件,则判断首次启动进程b时,共享内存中是否有未处理的事件操作;
[0098]
步骤s7.若没有未处理的事件操作,则进程b进入等待通知状态,当进程b收到通知,从共享内存中获取事件类型;若有未处理的事件操作,则从共享内存中获取事件类型;
[0099]
步骤s8.根据事件类型进入不同的事件流程,根据事件类型从共享内存中获取此事件对应的数据,处理并将返回值写入到共享内存,设置事件状态为完成并针对图标进行操作,进程b结束;
[0100]
步骤s9.检测到针对图标的操作时,生成回调指令,基于回调指令回调至进程a;进程a判断是否返回超时,若超时,则设置错误码并返回,进程a结束;若不超时,则从共享内存中获取返回值,进程a结束。
[0101]
以上所述实施例是用以说明本发明,并非用以限制本发明,所以举例数值的变更或等效元件的置换仍应隶属本发明的范畴。
[0102]
由以上详细说明,可使本领域普通技术人员明了本发明的确可达成前述目的,实已符合专利法的规定。
[0103]
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,应当指出的是,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1