一种实现客户端单实例运行的方法、装置及存储介质与流程

文档序号:17600651发布日期:2019-05-07 20:15阅读:156来源:国知局
一种实现客户端单实例运行的方法、装置及存储介质与流程

本发明属于应用启动技术领域,尤其涉及一种实现客户端单实例运行的方法、装置及存储介质。



背景技术:

应用程序在启动时,系统会创建一个启动进程来执行应用启动任务,具体会通过创建一个实例来管理启动进程。客户端每打开一次,系统就会创建一个实例,多次打开客户端会引起数据冲突,导致访问数据丢失或错误。

为保证客户端启动全局只有一个单实例,目前,常用的方法是使用互斥锁实现启动进程的单实例运行,互斥锁可以实现应用启动进程只被一个实例对象访问,但二次启动时,将无法显示已经打开过的客户端程序,影响用户体验。



技术实现要素:

有鉴于此,本发明实施例提供了一种实现客户端单实例运行的方法、装置及存储介质,用于实现客户端的单实例运行,并保证二次启动时能够显示已经打开的客户端。。

本发明实施例的第一方面,提供了一种实现客户端单实例运行的方法,包括:

预定客户端第一次启动后,对所述预定客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象;

当监听到所述预定客户端被再次启动,确认当前启动为第二次启动后,向所述本地服务器对象发送消息,并退出当前启动进程;

所述本地服务器对象接收到所述消息后,在系统界面展示主程序窗口。

本发明实施例的第二方面,提供了一种实现客户单单实例运行的装置,包括:

加锁模块,用于预定客户端第一次启动后,对所述预定客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象;

确认模块,用于当监听到所述预定客户端被再次启动,确认当前启动为第二次启动后,向所述本地服务器对象发送消息,并退出当前启动进程;

显示模块,用于所述本地服务器对象接收到所述消息后,在系统界面展示主程序窗口。

本发明实施例的第三方面,提供了一种装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如本发明实施例第一方面所述方法的步骤。

本发明实施例的第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

本发明实施例的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被一个或多个处理器执行时实现本发明实施例第一方面提供的所述方法的步骤。

本发明实施例中,通过对第一次启动时的客户端添加文件锁,并创建本地服务器,在该客户端二次启动时,确认当前为二次启动后,退出当前启动线程,并通过与本地服务器通信,调用展示第一次启动时的主窗口。从而实现客户端启动的单实例运行,在与互斥锁具有同等功能下,方便获取并打开首次启动的窗口,不仅节省系统资源,而且能减少数据混乱引起的访问错误,提升用户体验。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的实现客户端单实例运行的方法的一个实施例流程图;

图2为本发明实施例提供的实现客户端单实例运行的方法的另一个实施例流程图;

图3为本发明实施例提供的实现客户端单实例运行的装置的结构示意图;

图4为本发明实施例提供的终端装置的结构示意图。

具体实施方式

本发明实施例提供了一种实现客户端单实例运行的方法、装置及存储介质,用于实现客户端全局只有一个单实例运行,并方便调用已经打开过的客户端窗口。

为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本发明一部分实施例,而非全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

实施例一:

请参阅图1,本发明实施例提供的单例类接口调用方法的流程示意图,包括以下步骤:

s101、预定客户端第一次启动后,对所述预定客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象;

所述预定客户端指的是安装在用户设备上应用程序,如斗鱼app客户端。所述启动是指用户通过点击exe可执行文件或桌面快捷启动图标打开应用程序的过程。应用程序在启动时,会执行一系列任务,如数据初始化、获取运行环境,连接网络发起网络请求等,一般可通过创建单实例管理应用启动过程。

所述预定客户端对应的本地文件即安装客户端后,该存放在系统硬盘上应用文件,这些本地文件中包含有配置文件、插件及可执行文件等等,所述加锁操作即对本地文件添加文件锁,使得该本地文件只能被当前程序访问,即只能被当前单实例访问。

所述本地服务器即在本地创建的服务器,可用于进程通信,如通过qlocalserver实现的基于本地套接字(socket)的服务端,所述qlocalserver用于创建本地服务器,可接收来自本地的socket的连接。所述本地服务器对象用于处理与客户端client的通信消息。

可选的,获取所述预定客户端对应的本地文件名称和当前进程会话id,拼接所述本地文件名称和所述当前进程会话id作为所述预定客户端唯一id。

进一步的,利用所述预定客户端唯一id标识所述本地服务器对象和所述本地文件的文件锁,调用listen函数监听所述预定客户端唯一id。

s102、当监听到所述预定客户端被再次启动,确认当前启动为第二次启动后,向所述本地服务器对象发送消息,并退出当前启动进程;

所述再次启动指的是第一次启动后客户端尚处于运行过程中,客户端又再次被启动。客户端每次启动都会创建一个实例管理启动进程,频繁启动客户端容易引起访问数据混乱,而仅仅使用互斥锁防止客户端重复启动,容易在用户最小化到托盘后,第二次打开时客户端不会出现任何反应,当系统托盘中应用程序较多时,难以找到要打开的客户端,直接启动又不会有任何反应,这样会直接影响用户使用体验。

当前单实例启动进程会首先访问本地文件判断本地文件是否已添加文件锁,当发现本地文件不能加载后,即确认当前启动是否为第二次启动,由于客户端每次被启动后可能会退出运行状态,所以需要确认当前启动状态,具体的,获取所述预定客户端对应的本地文件句柄,判断所述本地文件句柄是否加锁;当所述本地文件句柄未加锁,则确认当前启动为第二次启动。所述文件句柄用于唯一表识本地文件,可以利用所述预定客户端唯一id表示。

s103、所述本地服务器对象接收到所述消息后,在系统界面展示主程序窗口。

通过与本地服务器对象通信,可以确认当前启动为二次启动,退出当前启动进程,并且本地服务器对象成功接收到消息后,可以控制展示主程序窗口。

所述主程序窗口即第一次启动客户端后,客户端当前的展示窗口。通过与本地服务器的进程通信,当前启动进程可以通知展示主窗口。

可选的,创建一个本地连接对象,所述本地连接对象调用connecttoserver函数连接所述本地服务器对象,连接成功后,向所述本地服务器对象发送预定消息。所述预定消息可以是用于验证通信是否成功的消息,也可以是执行预定操作的消息,如回调客户端主界面等。

上述步骤,通过为客户端本地文件加锁保证客户端单实例运行,并确认当前为二次启动后退出启动进程,防止多次启动客户端引起的数据访问出错,同时通过创建本地服务器,实现进程通信,使得用户在二次启动时,能够调用展示首次启动后的主窗口。

实施例二:

在图1的基础上,结合图2详述实现客户端单实例运行的方法具体过程,如下:

s201、创建客户端本地文件锁;

在创建本地文件的文件锁之前,需要首先设置客户端的唯一id,用于标识客户端。

示例性的,在客户端初始化接口中,调用applicationfilepath函数获取该客户端的本地文件名称,该函数可获取客户端本地文件路径下的文件名称,并调用processidtosessionid函数获取一个固定的id字符串,该函数可获取当前进程下的会话id,拼接该客户端本地文件名称和id字符串作为所述预定客户端的唯一id,该唯一的id作为本地服务器名称和文件锁对应的本地文件名称,用于唯一标识本地文件锁和本地服务器,防止后续进程的恶意修改。

创建一个qtlockedfile对象,该对象主要用于控制多个客户端的单实例启动。在该对象中,调用setfilename函数设置第一步得到的客户端唯一id作为本地文件名称;

在该对象中,首先调用open函数打开客户端本地文件句柄,然后调用lock函数掉该文件句柄加锁。这样当前被加锁文件只能被当前单实例访问,第二次启动的客户端的单实例获取不到本地文件句柄的访问权限。

在所述qtlockedfile对象中,定义并调用islock函数,判断再次启动前,是否已对客户端的文件句柄加锁,从而确定当前启动是否为第二次启动。

通过调用qtlockedfile对象中定义的文件加锁方法以及判断是否加锁的方法,可以对第一次启动的客户端的本地文件加锁,同时可以判断是否是第一次启动。具体的,客户端每次启动时,都会调用islock函数判断当其是否为二次启动。由于客户端的每一次启动后,都有可能退出客户端,即运行进程被结束,所以首先需要确认当前客户端启动状态。

s202、创建本地服务器;

所述本地服务器可以是编程中两个进程通信中虚拟的服务器,如socket中常用到的本地服务器。

创建本地服务器前,优先确认当前是第一次启动客户端。

若当前启动为第一次启动,除调用lock加锁外,创建一个qlocalserver本地服务器对象,调用listen函数监听客户端唯一id。所述qlocalserver对象用于与第二次打开的启动进程通信。

s203、确认是第二次启动,退出当前启动进程;

应用通过单实例执行启动进程,启动结束后会进而运行状态。在本发明实施例中,应用在自动进程中,会优先判断当前是否为二次启动。

若当前是第二次启动客户端,就调用sendmessage函数向第一次启动的客户端发送一条消息,然后并调用return退出当前启动过程。

可选的,在发送消息之前还包括:创建一个qlocalsocket本地连接对象,然后调用connecttoserver函数连接s202中创建的本地服务器对象。所述qlocalsocket对象可以与第一次打开客户端时进行连接通信。

s204、与本地服务器通信,调用展示主程序窗口。

客户端的启动进程通过建立通信,可以实现进程间的消息传递。为保证客户端的单实例运行,启动进程间的通信既可以确认当前为二次启动,而且能够进行参数的传递,进而,在第二次启动时可以实现对主程序窗口调用展示,所述主程序窗口可以是客户端首次启动时,客户端的展示窗口。

基于步骤s203中的通信连接,本地服务器接收到第二次启动进程发送的消息,表示当前通信成功,通过通信连接,调用activatewindow函数显示客户端的主程序窗口,所述activatewindow函数可将主程序窗口设为顶层窗体,展示已打开的客户端窗口界面。

在本发明实施例中,基于客户端两次启动客户端之间的通信机制,不仅能保障客户端的单实例运行,而且可以实现显示已经打开过的客户端窗口。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

实施例三:

上面主要描述了一种实现客户端单实例运行的方法,下面将对一种实现客户端单实例运行的的装置进行详细描述。

图3示出了实现客户端单实例运行的装置的结构示意图,包括:

加锁模块310,用于预定客户端第一次启动后,对所述预定客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象;

所述预定客户端对应的本地文件即安装客户端后,该存放在系统硬盘上应用文件,这些本地文件中包含有配置文件、插件及可执行文件等等,所述加锁操作即对本地文件添加文件锁,使得该本地文件只能被当前程序访问,即只能被当前单实例访问。

所述本地服务器即在本地创建的服务器,可用于进程通信,如通过qtlocalserver实现的基于本地套接字(socket)的服务端。所述本地服务器对象用于处理与客户端client的通信消息。

可选的,所述预定客户端第一次启动后,对所述客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象还包括:

获取所述预定客户端对应的本地文件名称和当前进程会话id,拼接所述本地文件名称和所述当前进程会话id作为所述预定客户端唯一id。

可选的,利用所述预定客户端唯一id标识所述本地服务器对象和所述本地文件的文件锁,调用listen函数监听所述预定客户端唯一id。

确认模块320,用于当监听到所述预定客户端被再次启动,确认当前启动为第二次启动后,向所述本地服务器对象发送消息,并退出当前启动进程;

可选的,所述确认模块320包括:

判断单元,用于获取所述预定客户端对应的本地文件句柄,判断所述本地文件句柄是否加锁;

确认单元,用于当所述本地文件句柄未加锁,则确认当前启动为第二次启动。

显示模块330,用于所述本地服务器对象接收到所述消息后,在系统界面展示主程序窗口。

可选的,所述向所述本地服务器对象发送消息具体为:

创建一个本地连接对象,所述本地连接对象调用connecttoserver函数连接所述本地服务器对象,连接成功后,向所述本地服务器对象发送预定消息。

以上所述装置中通过加锁模块和确认模块,不仅可以保证客户端启动的单实例运行,节省系统资源,防止访问数据混乱出错,而且实现进程通信,方便展示已经打开过的客户端。

实施例四:

图4是本发明一实施例提供的实现客户端单实例运行的装置结构的示意图。所述装置一般可以一种终端设备,即具备触摸屏的移动计算机设备,包括但不限于智能手机、智能手表、笔记本、平板电脑、pos机甚至包括车载电脑。如图4所示,该实施例的终端装置4包括:存储器410、处理器420以及系统总线430,所述存储器410包括存储其上的可运行的程序4101,本领域技术人员可以理解,图4中示出的终端装置结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

下面结合图4对终端装置的各个构成部件进行具体的介绍:

存储器410可用于存储软件程序以及模块,处理器420通过运行存储在存储器410的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器410可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器410可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

在存储器410上包含网络请求方法的可运行程序4101,所述可运行程序4101可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器410中,并由处理器420执行,以实现客户端的单实例运行,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序4101在所述服务器4中的执行过程。例如,所述计算机程序4101可以被分割为加锁模块、确认模块及显示模块。

处理器420是服务器的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器410内的软件程序和/或模块,以及调用存储在存储器410内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器420可包括一个或多个处理单元;优选的,处理器420可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器420中。

系统总线430是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如pci总线、isa总线、vesa总线等。处理器420的指令通过总线传递至存储器410,存储器410反馈数据给处理器420,系统总线430负责处理器420与存储器410之间的数据、指令交互。当然系统总线430还可以接入其他设备,例如网络接口、显示设备等。

所述终端装置应至少包括网卡、输出设备等,其他构成部件在此不再赘述。

在本发明实施例中,该终端装置所包括的处理器420执行的可运行程序具体为:

一种实现客户端单实例运行的方法,包括:

预定客户端第一次启动后,对所述预定客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象;

当监听到所述预定客户端被再次启动,确认当前启动为第二次启动后,向所述本地服务器对象发送消息,并退出当前启动进程;

所述本地服务器对象接收到所述消息后,在系统界面展示主程序窗口。

进一步的,所述预定客户端第一次启动后,对所述客户端对应的本地文件进行加锁操作,并创建一个本地服务器对象还包括:

获取所述预定客户端对应的本地文件名称和当前进程会话id,拼接所述本地文件名称和所述当前进程会话id作为所述预定客户端唯一id。

进一步的,所述拼接所述本地文件名称和所述当前进程会话id作为所述预定客户端唯一id还包括:

利用所述预定客户端唯一id标识所述本地服务器对象和所述本地文件的文件锁,调用listen函数监听所述预定客户端唯一id。

进一步的,所述确认当前启动为第二次启动后具体为:

获取所述预定客户端对应的本地文件句柄,判断所述本地文件句柄是否加锁;

当所述本地文件句柄未加锁,则确认当前启动为第二次启动。

进一步的,所述向所述本地服务器对象发送消息具体为:

创建一个本地连接对象,所述本地连接对象调用connecttoserver函数连接所述本地服务器对象,连接成功后,向所述本地服务器对象发送预定消息。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的模块、单元和/或方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1