一种线程间的交互方法、电子设备及可读存储介质技术

技术编号:21627352 阅读:26 留言:0更新日期:2019-07-17 10:36
本发明专利技术实施例提供了一种线程间的交互方法、电子设备及可读存储介质,用于提供一种在QT平台中多线程与UI线程之间的交互的方案。该方法包括:在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承QT中的QObjec类,UI任务队列类中编写有所述实例对象创建函数和任务投递函数;通过QObjec类中的连接函数将任务信号和任务槽函数连接;在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。

An Interactive Method Between Threads, Electronic Equipment and Readable Storage Media

【技术实现步骤摘要】
一种线程间的交互方法、电子设备及可读存储介质
本专利技术涉及电子
,尤其涉及一种线程间的交互方法、电子设备及可读存储介质。
技术介绍
在现有技术中,QT是一个跨平台C++图形用户界面应用程序开发框架,在该平台下,程序的UI窗口一般使用一个单独而且特别的UI线程,与UI相关的例如鼠标操作、键盘操作等相关消息都会在该线程中处理。但是,如果在程序中使用多个线程,每个线程中的任务均在该线程中执行,但如果其他线程中的任务需要与UI线程进行同步。例如,在UI线程中开启了一个定时器QTimer,在其他的线程中需要让该定时器停止,而QT的定时器的开启与结束必须在同一个线程内,现有技术没有提供QT平台中多线程与UI线程之间的交互的方案。
技术实现思路
本专利技术实施例提供了一种线程间的交互方法、电子设备及可读存储介质,用于提供一种在QT平台中多线程与UI线程之间的交互的方案。第一方面,本专利技术提供了一种线程间的交互方法,包括:在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所述UI任务队列类中编写有所述实例对象创建函数和任务投递函数;通过所述QObjec类中的连接函数将任务信号和任务槽函数连接,所述任务槽函数在所述UI线程中执行;在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。可选的,所述任务投递函数的参数为std::function类型,在所述调用所述任务投递函数将其他线程的任务放入任务队列之前,所述方法还包括:将放入所述任务队列的任务封装成所述std::function类型。可选的,在所述调用所述任务投递函数将其他线程的任务放入任务队列之前,所述方法还包括:对所述任务队列进行加锁。可选的,在从所述任务队列中获取任务之前,所述方法还包括:对所述任务队列进行加锁。第二方面,本专利技术实施例提供一种电子设备,包括:创建单元,用于在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所述UI任务队列类中编写有所述实例对象创建函数和任务投递函数;连接单元,用于通过所述QObjec类中的连接函数将任务信号和任务槽函数连接,所述任务槽函数在所述UI线程中执行;发送单元,用于在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;执行单元,用于在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。可选的,所述任务投递函数的参数为std::function类型,所述电子设备还包括:封装单元,用于在调用所述任务投递函数将其他线程的任务放入任务队列之前,将放入所述任务队列的任务封装成所述std::function类型。可选的,所述电子设备还包括:第一加锁单元,用于在调用所述任务投递函数将其他线程的任务放入任务队列之前,对所述任务队列进行加锁。可选的,所述电子设备还包括:第二加锁单元,用于在从所述任务队列中获取任务之前,对所述任务队列进行加锁。第三方面,本专利技术实施例提供一种电子设备,所述电子设备包括处理器,所述处理器用于执行存储器中存储的计算机程序时实现如前述第一方面实施例中所述的线程间的交互方法的步骤。第四方面,本专利技术实施例提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如前述第一方面实施例中所述的线程间的交互方法的步骤。本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:在本专利技术实施例的技术方案中,在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,该UI任务队列类继承QT中的QObjec类,并且编写有实例对象创建函数和任务投递函数。进而,可通过QObjec类中的连接函数将任务信号和任务槽函数连接,进而,在调用任务投递函数将其他线程的任务放入任务队列时,发送任务信号,触发任务槽函数被调用,在任务槽函数被调用时,从任务队列中获取任务,在UI线程中执行获取的任务,直至任务队列中的任务全部被执行。由于任务槽函数执行一定在UI进程中,所以,可以确保其他线程的任务一定是运行在UI线程中。所以,能有效解决其他线程与UI线程的交互问题,可大大的提高了开发的效率以及程序的稳定性。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本专利技术的限制。在附图中:图1为本专利技术第一实施例中的一种线程间的交互方法的流程图;图2为本专利技术第二实施例中的电子设备的示意图;图3为本专利技术第三实施例中电子设备的示意图。具体实施方式本专利技术实施例提供了一种线程间的交互方法、电子设备及可读存储介质,用于提供一种在QT平台中多线程与UI线程之间的交互的方案。该方法包括:在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所述UI任务队列类中编写有所述实例对象创建函数和任务投递函数;通过所述QObjec类中的连接函数将任务信号和任务槽函数连接,所述任务槽函数在所述UI线程中执行;在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。下面通过附图以及具体实施例对本专利技术技术方案做详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互组合。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。实施例请参考图1,本专利技术第一实施例提供一种线程间的交互方法,该线程间的交互方法包括如下步骤:S101:在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所述UI任务队列类中编写有所述实例对象创建函数和任务投递函数;S102:通过所述QObjec类中的连接函数将任务信号和任务槽函数连接,所述任务槽函数在所述UI线程中执行;S103:如在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;S104:在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。具体的,在本实施例中,为了能够实现其他线程的任务能够在UI线本文档来自技高网...

【技术保护点】
1.一种线程间的交互方法,其特征在于,包括:在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所述UI任务队列类中编写有所述实例对象创建函数和任务投递函数;通过所述QObjec类中的连接函数将任务信号和任务槽函数连接,所述任务槽函数在所述UI线程中执行;在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。

【技术特征摘要】
1.一种线程间的交互方法,其特征在于,包括:在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所述UI任务队列类中编写有所述实例对象创建函数和任务投递函数;通过所述QObjec类中的连接函数将任务信号和任务槽函数连接,所述任务槽函数在所述UI线程中执行;在调用所述任务投递函数将其他线程的任务放入任务队列时,发送所述任务信号,触发所述任务槽函数被调用;在所述任务槽函数被调用时,从所述任务队列中获取任务,在所述UI线程中执行获取的任务,直至所述任务队列中的任务全部被执行。2.如权利要求1所述的方法,其特征在于,所述任务投递函数的参数为std::function类型,在所述调用所述任务投递函数将其他线程的任务放入任务队列之前,所述方法还包括:将放入所述任务队列的任务封装成所述std::function类型。3.如权利要求1所述的方法,其特征在于,在所述调用所述任务投递函数将其他线程的任务放入任务队列之前,所述方法还包括:对所述任务队列进行加锁。4.如权利要求1所述的方法,其特征在于,在从所述任务队列中获取任务之前,所述方法还包括:对所述任务队列进行加锁。5.一种电子设备,其特征在于,包括:创建单元,用于在用户界面UI线程启动时调用实例对象创建函数创建UI任务队列类的实例对象,其中,所述UI任务队列类继承图形用户界面应用程序开发框架QT中的QObjec类,所...

【专利技术属性】
技术研发人员:李从章张文明陈少杰
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北,42

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

1