CN110704203B - 一种可中断的远程过程调用方法及装置 - Google Patents
一种可中断的远程过程调用方法及装置 Download PDFInfo
- Publication number
- CN110704203B CN110704203B CN201810750589.5A CN201810750589A CN110704203B CN 110704203 B CN110704203 B CN 110704203B CN 201810750589 A CN201810750589 A CN 201810750589A CN 110704203 B CN110704203 B CN 110704203B
- Authority
- CN
- China
- Prior art keywords
- remote procedure
- procedure call
- call
- result
- return
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 283
- 230000001360 synchronised effect Effects 0.000 claims abstract description 53
- 230000006870 function Effects 0.000 claims description 99
- 101000772194 Homo sapiens Transthyretin Proteins 0.000 claims description 50
- 102100029290 Transthyretin Human genes 0.000 claims description 50
- 238000004590 computer program Methods 0.000 claims description 16
- 230000007717 exclusion Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 230000004044 response Effects 0.000 description 3
- 230000004075 alteration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Sub-Exchange Stations And Push- Button Telephones (AREA)
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种可中断的远程过程调用方法及装置,该方法包括:若远程过程调用为同步调用且为可中断,判断等待时间是否小于预置的超时时间;若等待时间不小于预置的超时时间,则结束远程过程调用;若等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束远程过程调用;若中断函数的返回值为true,则结束远程过程调用;若中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;若已接收到被调用端的返回结果,则结束远程过程调用;若未接收到所述被调用端的返回结果,则继续执行判断等待时间是否小于预置时间。可以通过设置中断函数,在接收到调用结果或调用超时之前,结束本次远程过程调用,以使得当前线程处于可运行状态。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种可中断的远程过程调用方法及装置。
背景技术
所谓远程过程调用(RPC,Remote Procedure Call),就是一个进程调用另外一个进程所提供的方法,但是在调用端的角度仍然跟调用本进程的函数是一致的。在远程过程调用中,将要提供给被调用端进程的所有参数序列化为一个网络消息,然后通过网络传输发送到被调用端进程中。被调用端处理完成相应的服务后,将产生的结果也序列化成一个网络消息,发送到调用端进程。
在RPC的实现中,如果以同步的方式去调用对方程序的RPC服务函数,那么当前线程就会被阻塞住,一直等到对方程序的响应到达或者调用超时,当前线程才能继续执行。所以当在有图形界面的主线程中以同步的方式调用RPC时,那么该程序的主线程会被阻塞,从而导致任何的界面消息,包括鼠标点击,键盘消息等都不能被响应,从而造成程序卡死的现象。
发明内容
本发明提供一种可中断的远程过程调用方法及装置,解决了现有技术中,在远程过程的同步调用过程中,必须等到调用结果或者调用超时,当前线程才能继续执行的问题。
第一方面,本发明实施例提供了一种可中断的远程过程调用方法,所述方法包括:
判断远程过程调用是否为同步调用;
若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;
若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;
若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;
若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;
若所述中断函数的返回值为true,则结束所述远程过程调用;
若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;
若已接收到所述被调用端的返回结果,则结束所述远程过程调用;
若未接收到所述被调用端的返回结果,则继续执行所述判断所述等待时间是否小于所述预置时间。
可选的,所述判断远程过程调用是否为同步调用,包括:
根据RPC_ATTR_ASYNC_CALL属性的值判断所述远程过程调用是否为同步调用,所述RPC_ATTR_ASYNC_CALL属性用于设置调用的方式;
若所述RPC_ATTR_ASYNC_CALL属性的值为0,确定所述远程过程调用为同步调用;
若所述RPC_ATTR_ASYNC_CALL属性的值为1,确定所述远程过程调用为异步调用。
可选的,所述判断所述远程过程调用是否被设置为可中断,包括:
通过设置RPC_ATTR_CALLBACK_FUNCTION属性注册类型为RPC_POLL_TASK的所述中断回调函数,所述RPC_ATTR_CALLBACK_FUNCTION属性用于设置函数中的回调函数;
判断所述RPC_ATTR_CALLBACK_FUNCTION属性的值是否为0;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值不为0,则确定所述远程过程调用被设置为可中断;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值为0,则确定所述远程过程调用被设置为非中断。
可选的,所述判断所述远程过程调用是否被设置为可中断之后,还包括:
将IRpcArgument类型的远程过程调用参数序列化为所述远程过程调用消息;
创建远程过程调用消息组合结构体,所述远程过程调用消息组合结构体包括rpcMessage字段、互斥锁成员、条件成员和结果成员,所述互斥锁成员用于控制函数不返回,所述条件成员用于设置函数执行的条件,所述结果成员用于设置向调用端返回的结果;
将所述远程过程调用消息保存到所述rpcMessage字段中。
可选的,若所述中断函数的返回值为true,则结束所述远程过程调用包括:
若所述中断函数的返回值为true,设置所述远程过程调用消息组合结构体的结果成员为ERROR_INTERRUPTED,表示所述远程过程调用被中断;
将所述结果成员作为返回值返回调用端,从而结束所述远程过程调用。
可选的,若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用包括:
若所述等待时间不小于所述预置的超时时间,设置所述所述远程过程调用消息组合结构体的结果成员为ERROR_TIMEOUT,表示所述远程过程调用超时;
将所述结果成员作为返回值返回调用端,从而结束所述远程过程调用。
可选的,所述判断所述远程过程调用是否被设置为可中断之后,还包括:
若所述远程过程调用被设置为非中断,则在将所述远程过程调用消息发送到所述被调用端后,执行非中断的同步调用;
其中,在所述非中断的同步调用中,调用所述条件成员的timed_wait方法,将所述互斥锁成员传入所述timed_wait方法的第一个参数,将所述预置的超时时间传入所述timed_wait方法的第二参数,以使得所述timed_wait方法在所述预置的超时时间内不会返回;
若在所述预置的超时时间内接收到所述被调用端的返回结果,调用所述条件成员的signal_one方法来触发所述timed_wait方法返回true,表示所述远程过程调用没有超时,并将所述被调用端的返回结果保存到所述结果成员后返回所述调用端,从而结束所述远程过程调用;
若在所述预置的超时时间内未接收到所述被调用端的返回结果,所述timed_wait方法返回false,表示所述远程过程调用超时,并将所述结果成员设置为ERROR_TIMEOUT后返回所述调用端,从而结束本次远程过程调用。
第二方面,本发明实施例提供了一种可中断的远程过程调用装置,所述装置包括:
第一判断单元,用于判断远程过程调用是否为同步调用;
第二判断单元,用于若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;
第三判断单元,用于若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;
第一结束单元,用于若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;
第四判断单元,用于若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;
第二结束单元,用于若所述中断函数的返回值为true,则结束所述远程过程调用;
第五判断单元,用于若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;
第三结束单元,用于若已接收到所述被调用端的返回结果,则结束所述远程过程调用;
若未接收到所述被调用端的返回结果,则继续执行所述所述第三判断单元的操作。
可选的,所述第一判断单元具体用于:
根据RPC_ATTR_ASYNC_CALL属性的值判断所述远程过程调用是否为同步调用,所述RPC_ATTR_ASYNC_CALL属性用于设置调用的方式;
若所述RPC_ATTR_ASYNC_CALL属性的值为0,确定所述远程过程调用为同步调用;
若所述RPC_ATTR_ASYNC_CALL属性的值为1,确定所述远程过程调用为异步调用。
可选的,所述第二判断单元具体用于:
通过设置RPC_ATTR_CALLBACK_FUNCTION属性注册类型为RPC_POLL_TASK的所述中断回调函数,所述RPC_ATTR_CALLBACK_FUNCTION属性用于设置函数中的回调函数;
判断所述RPC_ATTR_CALLBACK_FUNCTION属性的值是否为0;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值不为0,则确定所述远程过程调用被设置为可中断;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值为0,则确定所述远程过程调用被设置为非中断。
第三方面,本发明实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述可中断的远程过程调用方法的任一实施方式。
第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现实现上述可中断的远程过程调用方法的任一实施方式。
本申请实施例提供的方法、装置、设备及介质中,判断远程过程调用是否为同步调用;若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;若所述中断函数的返回值为true,则结束所述远程过程调用;若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;若已接收到所述被调用端的返回结果,则结束所述远程过程调用;若未接收到所述被调用端的返回结果,则继续执行所述判断所述等待时间是否小于所述预置时间。可以在远程过程的同步调用中,通过设置中断函数,在接收到调用结果或调用超时之前,结束本次远程过程调用,以使得当前线程处于可运行状态,解决了现有技术中,必须等到调用结果或者调用超时,当前线程才能继续执行的问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中可中断的远程过程调用方法的流程图;
图2为本发明实施例中可中断的远程过程调用装置的结构示意图;
图3为本发明实施例中电子设备的结构示意图;
图4为本发明实施例中存储介质的结构示意图。
具体实施方式
本申请实施例通过提供一种可中断的远程过程调用方法、装置、设备及介质,可以通过设置中断函数的值,在接收到调用结果或调用超时之前,结束本次远程过程调用,解决了现有技术中,当以同步的方式调用对方程序的RPC服务函数时,必须等到调用结果或者调用超时,当前线程才能继续执行的问题。
在一种远程过程调的优化方法中,可以基于包括C++函数对象的原远程过程调用的调用方法RpcCallProcedure设置升级版的远程过程调用的调用方法RpcCallProcedureEx,在RpcCallProcedureEx方法中,改用C语言的函数指针方式设置回调函数,并通过RpcAttribute属性方式设置参数。
其中,RpcCallProcedureEx方法的参数包括远程过程调用实例句柄、要发送的远端程序、远程过程调用服务名称、远程过程调用的参数、参数个数和int64类型的第二属性数组。从通过RpcAttribute属性方式设置的参数中获取需要的参数并调用RpcCallProcedure来实现RpcCallProcedureEx。
在以RpcAttribute属性方式设置的参数中,包括但不限于以下几种属性:
(1)RPC_ATTR_CALLBACK_FUNCTION属性,该属性用于设置RpcCallProcedureEx函数中相关的回调函数。
(2)RPC_ATTR_ASYNC_CALL属性,该属性用于设置调用的方式是同步调用还是异步调用。
(3)RPC_ATTR_TIMEOUT_VALUE属性,该属性用于设置超时时间的值,若没有设定该值,则默认的时间是INFINITE,即无限时间。
基于上述技术方案,本申请实施例中的技术方案,总体思路如下:
判断远程过程调用是否为同步调用;若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;若所述中断函数的返回值为true,则结束所述远程过程调用;若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;若已接收到所述被调用端的返回结果,则结束所述远程过程调用;若未接收到所述被调用端的返回结果,则继续执行所述判断所述等待时间是否小于所述预置时间。可以在远程过程的同步调用中,通过设置中断函数,在接收到调用结果或调用超时之前,结束本次远程过程调用,以使得当前线程处于可运行状态,解决了现有技术中,必须等到调用结果或者调用超时,当前线程才能继续执行的问题。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供一种可中断的远程过程调用方法,如图1所示,包括:
步骤S101,判断远程过程调用是否为同步调用。
具体的,根据RPC_ATTR_ASYNC_CALL属性的值判断所述远程过程调用是否为同步调用,所述RPC_ATTR_ASYNC_CALL属性用于设置调用的方式;若所述RPC_ATTR_ASYNC_CALL属性的值为0,确定所述远程过程调用为同步调用,继续执行步骤S102;若所述RPC_ATTR_ASYNC_CALL属性的值为1,确定所述远程过程调用为异步调用,继续执行步骤S107。应当理解,本实施例中所有属性的值的含义都是自定义的,在一些其他的实现方式中,也可以使用其他的值代表相同的含义,此处不做限制。
步骤S102,判断所述远程过程调用是否被设置为可中断。
通过设置RPC_ATTR_CALLBACK_FUNCTION属性注册类型为RPC_POLL_TASK的所述中断回调函数,所述中断回调函数的原型如下:
typedef bool(*RPC_POLL_TASK)(void*userData)
本实施例中,当中断回调函数返回true时,就表示要中断,此时不管有没有收到调用结果或有没有超时,都退出本次RPC同步调用;当中断回调函数返回false时表示不中断,继续等待调用的结果或者超时。
接下来,判断所述RPC_ATTR_CALLBACK_FUNCTION属性的值是否为0;若所述RPC_ATTR_CALLBACK_FUNCTION属性的值不为0,则确定所述远程过程调用被设置为可中断,执行中断的同步调用,继续执行步骤S103。
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值为0,则确定所述远程过程调用被设置为非中断,执行非中断的同步调用,继续执行步骤S108。
需要说明的是,判断所述远程过程调用是否被设置为可中断之后,在执行中断的同步调用或非中断的同步调用之前,还要将RpcCallProcedureEx中所携带的所有IRpcArgument类型的RPC参数序列化为远程过程调用消息,即一个类型为RpcMessage的结构体消息,再构建远程过程调用消息组合结构体,即RpcMessageComposite结构,该RpcMessageComposite结构包括rpcMessage字段、互斥锁成员mutex、条件成员condition和结果成员result,所述互斥锁成员用于控制函数不返回,所述条件成员用于设置函数执行的条件,所述结果成员用于设置向调用端返回的结果,其中,将序列化后的RpcMessage保存到RpcMessageComposite结构的rpcMessage字段中,并且创建一个类型为boost::mutex的互斥体对象,赋值给RpcMessageComposite结构的mutex成员,同时创建一个类型为boost::condition的条件对象,赋值给RpcMessageComposite结构的condition成员。
步骤S103,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间。
具体的,设置变量timeWaited表示等待时间,通过获取RPC_ATTR_TIMEOUT_VALUE的值得到预置的超时时间,所述判断等待时间是否小于预置的超时时间,即为判断变量timeWaited的值是否小于RPC_ATTR_TIMEOUT_VALUE的值。若所述等待时间不小于所述预置的超时时间,说明已经超时,则执行步骤S106。若所述等待时间小于所述预置的超时时间,说明没有超时,执行步骤S104。
步骤S104,根据中断函数的返回值判断是否结束所述远程过程调用。
具体的,可以通过人工设置中断函数的返回值,或者通过其他的触发条件来设置中断函数的返回值,此处不做限制。若所述中断函数的返回值为true,表示要中断,执行步骤S106,若所述中断函数的返回值不为true,表示不中断,则执行步骤S105。
步骤S105,判断是否接收到被调用端的返回结果。
若已接收到所述被调用端的返回结果,执行步骤S106,若未接收到所述被调用端的返回结果,继续执行步骤S103,判断所述等待时间是否小于所述预置时间,直到结束所述远程过程调用的条件被触发。
步骤S106,结束所述远程过程调用。
具体的,根据结束条件的不同,结束所述远程过程调用包括但不限于以下三种情况:
第一种,若所述等待时间不小于所述预置的超时时间,将RpcMessageComposite结构的result成员设置为ERROR_TIMEOUT,表示超时,并将result成员作为返回值返回调用端,从而结束本次远程过程调用,当前线程可以继续运行。
第二种,若所述中断函数的返回值为true,设置RpcMessageComposite结构中的result成员为ERROR_INTERRUPTED,表示所述远程过程调用被中断,并将result成员作为返回值返回调用端,从而结束本次远程过程调用,当前线程可以继续运行。
第三种,若已接收到所述被调用端的返回结果,从接收到的应答消息中解析出被调用方的返回结果,并将该返回结果保存到RpcMessageComposite结构的result成员中,并将result成员作为返回值返回调用端,从而结束本次远程过程调用,当前线程可以继续运行。
步骤S107,执行异步调用。
步骤S108,执行非中断的同步调用。
在非中断的同步调用中,当前线程将被挂起,一直等到对方程序的响应到达或者调用超时,当前线程才能继续执行。
具体来讲,若所述远程过程调用被设置为非中断,则在将所述远程过程调用消息发送到所述被调用端后,执行非中断的同步调用,在非中断的同步调用中,调用RpcMessageComposite结构的条件成员的timed_wait方法,将所述互斥锁成员mutex传入所述timed_wait方法的第一个参数,将所述预置的超时时间传入所述timed_wait方法的第二参数,以使得所述timed_wait方法在所述预置的超时时间内不会返回,当前线程一直被挂起,其中,通过获取RPC_ATTR_TIMEOUT_VALUE的值得到预置的超时时间;
若在所述预置的超时时间内接收到所述被调用端的返回结果,调用所述条件成员condition的signal_one方法来触发所述timed_wait方法返回true,表示所述远程过程调用没有超时,并将所述被调用端的返回结果保存到result成员后返回所述调用端,从而结束所述远程过程调用,当前线程得以继续执行;
若在所述预置的超时时间内未接收到所述被调用端的返回结果,所述timed_wait方法返回false,表示所述远程过程调用超时,并将result成员设置为ERROR_TIMEOUT后返回所述调用端,从而结束本次远程过程调用,当前线程得以继续执行。
本实施例中,通过判断远程过程调用是否为同步调用;若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;若所述中断函数的返回值为true,则结束所述远程过程调用;若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;若已接收到所述被调用端的返回结果,则结束所述远程过程调用;若未接收到所述被调用端的返回结果,则继续执行所述判断所述等待时间是否小于所述预置时间。可以在远程过程的同步调用中,通过设置中断函数,在接收到调用结果或调用超时之前,结束本次远程过程调用,以使得当前线程处于可运行状态,解决了现有技术中,必须等到调用结果或者调用超时,当前线程才能继续执行的问题。
基于同一发明构思,本发明实施例还提供了实施例一中可中断的远程过程调用对应的装置,见实施例二。
实施例二
本实施例提供了一种可中断的远程过程调用装置,如图3所示,该装置包括:
第一判断单元201,用于判断远程过程调用是否为同步调用;
第二判断单元202,用于若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;
第三判断单元203,用于若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;
第一结束单元204,用于若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;
第四判断单元205,用于若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;
第二结束单元206,用于若所述中断函数的返回值为true,则结束所述远程过程调用;
第五判断单元207,用于若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;
第三结束单元208,用于若已接收到所述被调用端的返回结果,则结束所述远程过程调用;
若未接收到所述被调用端的返回结果,则继续执行所述所述第三判断单元203的操作。
可选的,所述第一判断单元具体用于:
根据RPC_ATTR_ASYNC_CALL属性的值判断所述远程过程调用是否为同步调用,所述RPC_ATTR_ASYNC_CALL属性用于设置调用的方式;
若所述RPC_ATTR_ASYNC_CALL属性的值为0,确定所述远程过程调用为同步调用;
若所述RPC_ATTR_ASYNC_CALL属性的值为1,确定所述远程过程调用为异步调用。
可选的,所述第二判断单元具体用于:
通过设置RPC_ATTR_CALLBACK_FUNCTION属性注册类型为RPC_POLL_TASK的所述中断回调函数,所述RPC_ATTR_CALLBACK_FUNCTION属性用于设置函数中的回调函数;
判断所述RPC_ATTR_CALLBACK_FUNCTION属性的值是否为0;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值不为0,则确定所述远程过程调用被设置为可中断;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值为0,则确定所述远程过程调用被设置为非中断。
在本申请实施例中,所述装置可以是智能手机、台式电脑、笔记本或平板电脑等电子设备,在此不作限制。
在本申请实施例中,所述装置可以为Android***,IOS***或Windows***,在此不作限制。
由于本发明实施例二所介绍的装置,为实施本发明实施例一的方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的电子设备实施例,详见
实施例三。
实施例三
本实施例提供一种电子设备,如图3所示,包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时,可以实现实施例一中任一实施方式。
由于本实施例所介绍的电子设备为实施本申请实施例一中方法所采用的设备,故而基于本申请实施例一中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
基于同一发明构思,本申请提供了实施例一对应的存储介质,详见实施例四。
实施例四
本实施例提供一种计算机可读存储介质400,如图4所示,其上存储有计算机程序411,该计算机程序411被处理器执行时,可以实现实施例一中任一实施方式。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
本申请实施例提供的方法、装置、设备及介质中,判断远程过程调用是否为同步调用;若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;若所述中断函数的返回值为true,则结束所述远程过程调用;若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;若已接收到所述被调用端的返回结果,则结束所述远程过程调用;若未接收到所述被调用端的返回结果,则继续执行所述判断所述等待时间是否小于所述预置时间。可以在远程过程的同步调用中,通过设置中断函数,在接收到调用结果或调用超时之前,结束本次远程过程调用,以使得当前线程处于可运行状态,解决了现有技术中,必须等到调用结果或者调用超时,当前线程才能继续执行的问题。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种可中断的远程过程调用方法,其特征在于,所述方法包括:
判断远程过程调用是否为同步调用;
若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;
若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;
若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;
若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;
若所述中断函数的返回值为true,则结束所述远程过程调用;
若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;
若已接收到所述被调用端的返回结果,则结束所述远程过程调用;
若未接收到所述被调用端的返回结果,则继续执行所述判断所述等待时间是否小于所述预置的超时时间。
2.根据权利要求1所述的方法,其特征在于,所述判断远程过程调用是否为同步调用,包括:
根据RPC_ATTR_ASYNC_CALL属性的值判断所述远程过程调用是否为同步调用,所述RPC_ATTR_ASYNC_CALL属性用于设置调用的方式;
若所述RPC_ATTR_ASYNC_CALL属性的值为0,确定所述远程过程调用为同步调用;
若所述RPC_ATTR_ASYNC_CALL属性的值为1,确定所述远程过程调用为异步调用。
3.根据权利要求1所述的方法,其特征在于,所述判断所述远程过程调用是否被设置为可中断,包括:
通过设置RPC_ATTR_CALLBACK_FUNCTION属性注册类型为RPC_POLL_TASK的中断回调函数,所述RPC_ATTR_CALLBACK_FUNCTION属性用于设置函数中的回调函数;
判断所述RPC_ATTR_CALLBACK_FUNCTION属性的值是否为0;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值不为0,则确定所述远程过程调用被设置为可中断;
若所述RPC_ATTR_CALLBACK_FUNCTION属性的值为0,则确定所述远程过程调用被设置为非中断。
4.根据权利要求1所述的方法,其特征在于,所述判断所述远程过程调用是否被设置为可中断之后,还包括:
将IRpcArgument类型的远程过程调用参数序列化为所述远程过程调用消息;
创建远程过程调用消息组合结构体,所述远程过程调用消息组合结构体包括rpcMessage字段、互斥锁成员、条件成员和结果成员,所述互斥锁成员用于控制函数不返回,所述条件成员用于设置函数执行的条件,所述结果成员用于设置向调用端返回的结果;
将所述远程过程调用消息保存到所述rpcMessage字段中。
5.根据权利要求4所述的方法,其特征在于,若所述中断函数的返回值为true,则结束所述远程过程调用包括:
若所述中断函数的返回值为true,设置所述远程过程调用消息组合结构体的结果成员为ERROR_INTERRUPTED,表示所述远程过程调用被中断;
将所述结果成员作为返回值返回所述调用端,从而结束所述远程过程调用。
6.根据权利要求4所述的方法,其特征在于,若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用包括:
若所述等待时间不小于所述预置的超时时间,设置所述所述远程过程调用消息组合结构体的结果成员为ERROR_TIMEOUT,表示所述远程过程调用超时;
将所述结果成员作为返回值返回调用端,从而结束所述远程过程调用。
7.根据权利要求4所述的方法,其特征在于,所述判断所述远程过程调用是否被设置为可中断之后,还包括:
若所述远程过程调用被设置为非中断,则在将所述远程过程调用消息发送到所述被调用端后,执行非中断的同步调用;
其中,在所述非中断的同步调用中,调用所述条件成员的timed_wait方法,将所述互斥锁成员传入所述timed_wait方法的第一个参数,将所述预置的超时时间传入所述timed_wait方法的第二参数,以使得所述timed_wait方法在所述预置的超时时间内不会返回;
若在所述预置的超时时间内接收到所述被调用端的返回结果,调用所述条件成员的signal_one方法来触发所述timed_wait方法返回true,表示所述远程过程调用没有超时,并将所述被调用端的返回结果保存到所述结果成员后返回所述调用端,从而结束所述远程过程调用;
若在所述预置的超时时间内未接收到所述被调用端的返回结果,所述timed_wait方法返回false,表示所述远程过程调用超时,并将所述结果成员设置为ERROR_TIMEOUT后返回所述调用端,从而结束本次远程过程调用。
8.一种可中断的远程过程调用装置,其特征在于,所述装置包括:
第一判断单元,用于判断远程过程调用是否为同步调用;
第二判断单元,用于若所述远程过程调用为同步调用,判断所述远程过程调用是否被设置为可中断;
第三判断单元,用于若所述远程过程调用被设置为可中断,在将远程过程调用消息发送到被调用端后,判断等待时间是否小于预置的超时时间;
第一结束单元,用于若所述等待时间不小于所述预置的超时时间,则结束所述远程过程调用;
第四判断单元,用于若所述等待时间小于预置的超时时间,则根据中断函数的返回值判断是否结束所述远程过程调用;
第二结束单元,用于若所述中断函数的返回值为true,则结束所述远程过程调用;
第五判断单元,用于若所述中断函数的返回值不为true,则判断是否接收到被调用端的返回结果;
第三结束单元,用于若已接收到所述被调用端的返回结果,则结束所述远程过程调用;
若未接收到所述被调用端的返回结果,则继续执行所述第三判断单元的操作。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-7任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810750589.5A CN110704203B (zh) | 2018-07-10 | 2018-07-10 | 一种可中断的远程过程调用方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810750589.5A CN110704203B (zh) | 2018-07-10 | 2018-07-10 | 一种可中断的远程过程调用方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110704203A CN110704203A (zh) | 2020-01-17 |
CN110704203B true CN110704203B (zh) | 2022-08-16 |
Family
ID=69192366
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810750589.5A Active CN110704203B (zh) | 2018-07-10 | 2018-07-10 | 一种可中断的远程过程调用方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110704203B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112769824B (zh) * | 2021-01-07 | 2023-03-07 | 深圳市大富网络技术有限公司 | 一种信息传输状态更新方法、终端、装置及存储介质 |
CN113190624A (zh) * | 2021-05-21 | 2021-07-30 | 中国工商银行股份有限公司 | 基于分布式跨容器的异步转同步调用方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1635485A (zh) * | 2003-12-26 | 2005-07-06 | 华为技术有限公司 | 远程同步调用过程中的超时自适应方法 |
JP2006185229A (ja) * | 2004-12-28 | 2006-07-13 | Hitachi Ltd | オンライン同期処理方法及び装置 |
CN105049255A (zh) * | 2015-08-05 | 2015-11-11 | 大唐移动通信设备有限公司 | 一种网元数据同步的方法及其装置 |
CN106161537A (zh) * | 2015-04-10 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 远程过程调用的处理方法、装置、***及电子设备 |
CN107466467A (zh) * | 2016-06-22 | 2017-12-12 | 深圳市大疆创新科技有限公司 | 一种远程同步的方法、装置及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8359588B2 (en) * | 2009-11-25 | 2013-01-22 | Arm Limited | Reducing inter-task latency in a multiprocessor system |
-
2018
- 2018-07-10 CN CN201810750589.5A patent/CN110704203B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1635485A (zh) * | 2003-12-26 | 2005-07-06 | 华为技术有限公司 | 远程同步调用过程中的超时自适应方法 |
JP2006185229A (ja) * | 2004-12-28 | 2006-07-13 | Hitachi Ltd | オンライン同期処理方法及び装置 |
CN106161537A (zh) * | 2015-04-10 | 2016-11-23 | 阿里巴巴集团控股有限公司 | 远程过程调用的处理方法、装置、***及电子设备 |
CN105049255A (zh) * | 2015-08-05 | 2015-11-11 | 大唐移动通信设备有限公司 | 一种网元数据同步的方法及其装置 |
CN107466467A (zh) * | 2016-06-22 | 2017-12-12 | 深圳市大疆创新科技有限公司 | 一种远程同步的方法、装置及*** |
Also Published As
Publication number | Publication date |
---|---|
CN110704203A (zh) | 2020-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104898952B (zh) | 一种终端分屏实现方法及终端 | |
US9990209B2 (en) | Digital assistance device for facilitating multi-stage setup | |
CN104182683A (zh) | 一种联机事务的监控方法、装置及*** | |
CN110704203B (zh) | 一种可中断的远程过程调用方法及装置 | |
CN107273226B (zh) | 在安卓***中集成组件及调用被集成组件的方法和装置 | |
CN105847319A (zh) | 一种移动终端网络请求方法及*** | |
CN111294377B (zh) | 一种依赖关系的网络请求发送方法、终端装置及存储介质 | |
CN110688203B (zh) | 一种任务执行方法和装置 | |
CN108920085B (zh) | 用于可穿戴设备的信息处理方法和装置 | |
CN113419865A (zh) | 云资源处理方法、相关装置及计算机程序产品 | |
CN110908646B (zh) | 一种积木式回调函数块构建方法、装置、存储介质和处理器 | |
EP3188071B1 (en) | Application accessing control method and device | |
CN110825461B (zh) | 数据处理方法和装置 | |
CN111309407A (zh) | 集成第三方库的处理方法及装置 | |
CN109426529B (zh) | 基于x窗口***图形绘制的方法、装置及终端 | |
CN113010285B (zh) | 用于处理数据的方法、装置、设备、介质和产品 | |
CN113112217B (zh) | 一种业务流程配置方法、装置、电子设备及计算机可读介质 | |
CN106708737B (zh) | 一种测试方法及装置 | |
CN115344370A (zh) | 任务调度方法、装置、设备及存储介质 | |
CN112379952B (zh) | 一种跨进程回调的实现方法 | |
CN115242972A (zh) | 一种应用调用摄像头的方法和装置、电子设备及存储介质 | |
CN114625458A (zh) | 页面数据的处理方法、装置、电子设备和存储介质 | |
CN109815429B (zh) | 浏览器页面关闭处理方法和装置 | |
CN109150993B (zh) | 一种获取网络请求切面的方法、终端装置及存储介质 | |
CN111737036A (zh) | 一种基于机器人流程自动化的业务处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20240322 Address after: Room 601, 6th Floor, Building 5, Lianhuayuan, Haidian District, Beijing, 100080 Patentee after: Aerospace Guosheng Technology Co.,Ltd. Country or region after: China Address before: 430000 East Lake Development Zone, Wuhan City, Hubei Province, No. 1 Software Park East Road 4.1 Phase B1 Building 11 Building Patentee before: WUHAN DOUYU NETWORK TECHNOLOGY Co.,Ltd. Country or region before: China |
|
TR01 | Transfer of patent right |