本申请涉及计算机,尤其涉及一种基于有名管道的动态库弹窗方法及系统。
背景技术:
1、linux系统或类unix系统(包括国产系统信创或银河麒麟等),在该系统下,如果应用程序调用c/c++库函数且函数接口中含有界面,可选择qt这种第三方图形用户界面(gui),相较于其它gui,qt有跨平台(如移植到国产移动操作系统鸿蒙上)性能良好、api丰富等优点。
2、进程间通信(ipc,interprocess communication)是指在不同进程之间传播或交换信息。简单说就是进程之间可以相互发送数据,而有名管道(fifo,又称命名管道)是ipc的一种。有名管道通过文件系统目录中存在一个管道文件实现进程进程间通信。管道文件仅仅是文件系统中的标示,并不在磁盘上占据空间。在使用时,在内存上开辟空间,作为两个进程数据交互的通道。
3、service是一种长期运行的后台进程,通常用于提供某种系统服务或网络功能。例如,ssh服务允许用户远程登录系统,web服务器(如apache或nginx)提供网站访问服务,数据库服务(如mysql或postgresql)为应用程序提供数据存储和管理功能。
4、实际应用中存在如下场景:
5、主进程通过子线程调用动态库接口,接口中含有交互界面,如输入密码、取消、确认。主进程可根据业务逻辑复杂度,或在主线程中直接调用,或创建子线程调用,提高性能和稳定性。交互界面在动态库中直接调用qt实现。同时,存在一个qt应用程序,该程序可能与主进程或者动态库库没有任何关联,有自己的独立功能。
6、首先,主进程在主线程调用动态库接口,可能会出现qt版本不兼容的问题。qt应用程序将库集成到程序中,不会存在qt版本不兼容的问题;linux或类unix系统/usr/lib下虽然有qt库,任何含有交互界面动态库无需担心找不到qt,但是如果动态库开发者使用的qt版本高于系统中的qt,则可能出现不兼容的情况,该问题可通过将较高版本的qt库打包到安装包中解决,但是也会因此增加安装包的体积。
7、其次,主进程通过子线程调用带有交互界面动态库,则会出现控件崩溃的情况,原因是子线程无法调用界面。该问题可通过增加一个service,界面程序在service实现。但是该方案无疑增加了开发成本。
8、因此,目前亟需解决的技术问题是:如何提供一种基于有名管道的动态库弹窗方法及系统,在不需另外开发传统service的基础上实现了动态库弹窗,节省了开发成本,并规避了子线程无法调用交互界面的问题。
技术实现思路
1、本申请的目的在于提供一种基于有名管道的动态库弹窗方法及系统,动态库与独立qt应用进程(下面统一称界面进程)通信完成弹窗界面交互,动态库不再需要绑定qt库,在不需另外开发传统service的基础上实现了动态库弹窗,节省了开发成本,并规避了子线程无法调用交互界面的问题。
2、为达到上述目的,本申请提供一种基于有名管道的动态库弹窗方法,该方法包括如下步骤:
3、响应于主进程调用动态库,动态库向界面进程发送交互执行指令;
4、响应于界面进程接收到所述交互执行指令,界面进程弹出交互界面窗口;
5、界面进程在交互界面窗口完成交互,并将交互结果送回动态库;
6、动态库接收到交互结果,完成业务逻辑并返回主进程。
7、如上所述的基于有名管道的动态库弹窗方法,其中,响应于主进程调用动态库,动态库向界面进程发送交互执行指令包括:
8、运行主进程;
9、主进程创建子线程,并通过子线程调用动态库;
10、响应于主进程的子线程调用动态库,动态库建立第一有名管道,并发送交互执行指令到该第一有名管道;
11、交互执行指令通过该第一有名管道发送给界面进程。
12、如上所述的基于有名管道的动态库弹窗方法,其中,响应于界面进程接收到交互执行指令,界面进程弹出交互界面窗口包括:
13、运行界面进程;
14、界面进程通过子线程建立第二有名管道;
15、界面进程的子线程通过其建立的第二有名管道监控并读取动态库中的交互执行指令;
16、界面进程根据交互执行指令在其主线程里弹出交互界面窗口。
17、如上所述的基于有名管道的动态库弹窗方法,其中,动态库接收到交互结果,完成业务逻辑并返回主进程包括:
18、动态库读取第二有名管道中的交互结果指令包,解析交互结果指令包,完成交互;
19、动态库完成解析交互结果指令包后,实现接口功能返回子线程,子线程完成功能返回主进程。
20、如上所述的基于有名管道的动态库弹窗方法,其中,在动态库和界面进程之间建立两个有名管道,
21、第一有名管道以动态库为参考为写管道,以界面进程为参考为读管道;
22、第二有名管道以动态库为参考为读管道,以界面进程为参考为写管道。
23、如上所述的基于有名管道的动态库弹窗方法,其中,界面进程接收到动态库发送的交互执行指令,对交互执行指令进行解析,若解析出“verify pin”,则调用校验pin交互界面。
24、如上所述的基于有名管道的动态库弹窗方法,其中,
25、界面进程在交互界面窗口完成交互,并将交互结果送回动态库包括:
26、界面进程在交互界面窗口完成交互,将交互结果组包为交互结果指令包,并发送到界面进程建立的第二有名管道。
27、如上所述的基于有名管道的动态库弹窗方法,其中,交互结果组包以“长度+值”的格式组包。
28、作为本申请的第二方面,本申请提供一种基于有名管道的动态库弹窗系统,其特征在于,执行所述的基于有名管道的动态库弹窗方法,该系统包括:
29、主进程、动态库和界面进程;
30、所述主进程与所述动态库之间通信连接,所述动态库与所述界面进程之间通信连接。
31、如上所述的基于有名管道的动态库弹窗系统,其中,在动态库和界面进程之间建立两个有名管道,第一有名管道以动态库为参考为写管道,以界面进程为参考为读管道;第二有名管道以动态库为参考为读管道,以界面进程为参考为写管道。
32、本申请实现的有益效果如下:
33、(1)本申请在不需另外开发传统service的基础上实现了动态库弹窗,节省了开发成本,并规避了子线程无法调用交互界面的问题。
34、(2)本申请在子线程调用有交互界面的动态库,动态库通过有名管道发送指令到现有运行集成界面进程,由界面进程完成交互并将结果组包返回给动态库,子线程实现间接调用交互界面。
1.一种基于有名管道的动态库弹窗方法,其特征在于,该方法包括如下步骤:
2.根据权利要求1所述的基于有名管道的动态库弹窗方法,其特征在于,响应于主进程调用动态库,动态库向界面进程发送交互执行指令包括:
3.根据权利要求1或2所述的基于有名管道的动态库弹窗方法,其特征在于,响应于界面进程接收到的交互执行指令,界面进程弹出交互界面窗口包括:
4.根据权利要求3所述的基于有名管道的动态库弹窗方法,其特征在于,动态库接收到交互结果,完成业务逻辑并返回主进程包括:
5.根据权利要求1所述的基于有名管道的动态库弹窗方法,其特征在于,在动态库和界面进程之间建立两个有名管道,
6.根据权利要求1所述的基于有名管道的动态库弹窗方法,其特征在于,界面进程接收到动态库发送的交互执行指令,对交互执行指令进行解析,若解析出“verify pin”,则调用校验pin交互界面。
7.根据权利要求1所述的基于有名管道的动态库弹窗方法,其特征在于,
8.根据权利要求7所述的基于有名管道的动态库弹窗方法,其特征在于,交互结果组包以“长度+值”的格式组包。
9.一种基于有名管道的动态库弹窗系统,其特征在于,执行权利要求1-8之一所述的方法,该系统包括:
10.根据权利要求9所述的基于有名管道的动态库弹窗系统,其特征在于,在动态库和界面进程之间建立两个有名管道,
