[发明专利]向UI线程投递回调函数的方法、装置及客户端有效
| 申请号: | 201710789011.6 | 申请日: | 2017-09-05 |
| 公开(公告)号: | CN107562540B | 公开(公告)日: | 2021-03-12 |
| 发明(设计)人: | 黄浩;张文明;陈少杰 | 申请(专利权)人: | 武汉斗鱼网络科技有限公司 |
| 主分类号: | G06F9/50 | 分类号: | G06F9/50;G06F9/54;G06F9/448;G06F9/451 |
| 代理公司: | 北京超凡志成知识产权代理事务所(普通合伙) 11371 | 代理人: | 王术兰 |
| 地址: | 430000 湖北省武汉市东湖开*** | 国省代码: | 湖北;42 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | ui 线程 投递 调函 方法 装置 客户端 | ||
技术领域
本发明涉及Windows技术领域,具体而言,涉及一种向UI线程投递回调函数的方法、装置及客户端。
背景技术
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。在Windows程序中主要分为2种线程类型:UI线程和工作线程。其中,UI线程被称为主线程,包含唯一的一个窗体消息循环,且程序中只能有一个UI线程,与用户界面(User Interface,UI)相关的所有操作必须在UI线程中执行,否则调用UI更新接口会失败。工作线程是在程序运行过程中创建的额外线程,用来执行比较耗时的后台操作,比如网络通信、数据库操作等。
通常项目在开发过程中,往往需要执行许多比较耗时的后台操作,如果耗时的后台操作放在UI线程里面执行,就会造成程序界面卡顿或者卡死,导致程序界面无响应。为解决上述问题,现有技术是创建一个工作线程来执行后台操作,等后台操作执行完毕,再调用UI更新接口继续做相应的处理与显示。但因为程序中所有的控件界面的更新操作,必须在UI线程中去处理更新,所以在工作线程中调用UI更新接口,容易造成UI界面更新无效,达不到更新的效果,造成调用失败。
发明内容
本发明的目的在于提供一种向UI线程投递回调函数的方法,以解决现有技术中在工作线程中调用UI更新接口易造成UI界面更新无效、更新效果不佳的问题。
本发明的目的还在于提供一种向UI线程投递回调函数的装置,以解决现有技术中在工作线程中调用UI更新接口易造成UI界面更新无效、更新效果不佳的问题。
本发明的目的还在于提供一种客户端,以解决现有技术中在工作线程中调用UI更新接口易造成UI界面更新无效、更新效果不佳的问题。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提出一种向UI线程投递回调函数的方法。所述向UI线程投递回调函数的方法包括将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
第二方面,本发明实施例还提出一种向UI线程投递回调函数的装置。所述向UI线程投递回调函数的装置包括封装模块、消息发送模块及调用模块。所述封装模块用于将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;所述消息发送模块用于向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;所述调用模块用于当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
第三方面,本发明实施例还提出一种客户端,所述客户端包括存储器;
处理器;及
向UI线程投递回调函数的装置,所述向UI线程投递回调函数的装置存储在所述存储器中并包括一个或多个由所述处理器执行的软件功能模块。所述向UI线程投递回调函数的装置包括封装模块、消息发送模块及调用模块。所述封装模块用于将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;所述消息发送模块用于向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;所述调用模块用于当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
相对现有技术,本发明具有以下有益效果:本发明实施例提供的向UI线程投递回调函数的方法、装置及客户端,将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。该向UI线程投递回调函数的方法实现从工作线程向UI线程投递回调函数,使回调函数运行在UI线程中,以达到在任意工作线程中执行界面更新操作,能避免UI线程在执行耗时的后台操作时造成的界面卡顿、无响应,在一定程度上提升了用户体验。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉斗鱼网络科技有限公司,未经武汉斗鱼网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710789011.6/2.html,转载请声明来源钻瓜专利网。





