CN107562540A - 向ui线程投递回调函数的方法、装置及客户端 - Google Patents

向ui线程投递回调函数的方法、装置及客户端 Download PDF

Info

Publication number
CN107562540A
CN107562540A CN201710789011.6A CN201710789011A CN107562540A CN 107562540 A CN107562540 A CN 107562540A CN 201710789011 A CN201710789011 A CN 201710789011A CN 107562540 A CN107562540 A CN 107562540A
Authority
CN
China
Prior art keywords
threads
message
function
call back
window
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.)
Granted
Application number
CN201710789011.6A
Other languages
English (en)
Other versions
CN107562540B (zh
Inventor
黄浩
张文明
陈少杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201710789011.6A priority Critical patent/CN107562540B/zh
Publication of CN107562540A publication Critical patent/CN107562540A/zh
Application granted granted Critical
Publication of CN107562540B publication Critical patent/CN107562540B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • User Interface Of Digital Computer (AREA)
  • Digital Computer Display Output (AREA)

Abstract

本发明实施例提出一种向UI线程投递回调函数的方法、装置及客户端,涉及Windows技术领域。该方法将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行,向预设的运行于UI线程的窗口过程函数发送来自工作线程的消息,当操作系统接收到消息后,依据该消息调用该窗口过程函数,并依据该窗口过程函数调用该回调对象,以使回调函数运行于所述UI线程中。该向UI线程投递回调函数的方法实现从工作线程向UI线程投递回调函数,使回调函数运行在UI线程中,以达到在任意工作线程中执行界面更新操作,能避免UI线程在执行耗时的后台操作时造成的界面卡顿、无响应,在一定程度上提升了用户体验。

Description

向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线程在执行耗时的后台操作时造成的界面卡顿、无响应,在一定程度上提升了用户体验。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例所提供的客户端的功能模块图。
图2示出了本发明第一实施例所提供的向UI线程投递回调函数的装置的功能模块图。
图3示出了本发明第二实施例所提供的向UI线程投递回调函数的方法的流程示意图。
图4示出了本发明第三实施例所提供的向UI线程投递回调函数的方法的流程示意图。
图标:100-客户端;500-向UI线程投递回调函数的装置;110-存储器;120-存储控制器;130-处理器;140-外设接口;150-射频单元;160-显示单元;170-输入输出单元;510-窗口类注册模块;520-窗口创建模块;530-封装模块;540-标识模块;550-消息发送模块;560-调用模块。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
本发明的一个实施例所提供的向UI线程投递回调函数的方法及装置可应用于图1所示的客户端100中。如图1所示,客户端100包括存储器110、存储控制器120、处理器130、外设接口140、射频单元150、显示单元160及输入输出单元170。在本实施例中,所述客户端100可以是,但不限于,个人电脑(personal computer,PC)、平板电脑等。
存储器110、存储控制器120、处理器130、外设接口140、射频单元150、显示单元160及输入输出单元170,各元件之间直接或间接地电性连接,以实现数据的传输或者交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现典型连接。在本实施例中,所述向UI线程投递回调函数的装置500包括至少一个可以软件或固件(firmware)的形式存储于存储器110中或固化在客户端100的操作系统(operating system,OS)中的软件功能模块。处理器130用于执行存储器110中存储的可执行模块,例如,该向UI线程投递回调函数的装置500所包括的软件功能模块及计算机程序等。在本实施例中,所述客户端100的操作系统优选为Windows系统。
其中,所述存储器110可以是但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。存储器110可用于存储软件程序以及模块,处理器130用于在接收到执行指令后,执行该程序。处理器130以及其他可能的组件对第二存储器110的访问可在存储控制器120的控制下进行。
处理器130可能是一种集成电路芯片,具有信号的处理能力。处理器130可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(NetworkProcessor,NP)等;还可以是数字信号处理器(DSP))、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
外设接口140将各种输入/输出装置(例如射频单元150、显示单元160、输入输出单元170)耦合至处理器130以及存储器110。在一些实施例中,外设接口140、处理器130以及存储控制器120可以在单个芯片中实现。在其他一些实例中,它们可以分别由独立的芯片实现。
射频单元150用于接收以及发送无线电波信号,实现无线电波与电信号的相互转换,从而实现客户端100与网络或其他通信设备之间的无线通信。
所述显示单元160用于提供一个交互界面(例如用户操作界面)或用于显示图像数据。在本实施例中,所述显示单元160可以是液晶显示器或触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处产生的触控操作,并将该感应到的触控操作交由处理器130进行计算和处理。
所述输入输出单元170用于提供给用户输入数据实现用户与客户端100的交互。在本实施例中,所述输入输出单元170可以是,但不限于,鼠标、键盘等。
可以理解,图1所示的结构仅为示意,所述客户端100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
第一实施例
请参照图2,为本发明第一实施例所提供的向UI线程投递回调函数的装置500的功能模块图。所述向UI线程投递回调函数的装置500可应用于图1所示的客户端100中。所述向UI线程投递回调函数的装置500包括窗口类注册模块510、窗口创建模块520、封装模块530、标识模块540、消息发送模块550及调用模块560。
所述窗口类注册模块510用于注册窗口类,其中,所述窗口类与所述窗口过程函数关联。
在本实施例中,可采用如下程序定义一个窗口过程函数,即LRESULT CALLBACKWndProcCallback(HWND window_handle,
UINT message,
WPARAM wparam,
LPARAM lparam);
该窗口过程函数WndProcCallback为用于接收和处理窗口消息的自定义接口,可以看到,该窗口过程函数WndProcCallback包括四个参数HWND、UINT、WPARAM、LPARAM,参数HWND表示窗口句柄,参数UINT表示消息类型,参数WPARAM及LPARAM表示消息参数。在创建窗口之前,必须先定义一个窗口类来规定创建窗口所需要的各种信息,例如,为窗口类指定上述定义的窗口过程函数WndProcCallback,使该窗口类与该窗口过程函数WndProcCallback关联。具体地,所述窗口类注册模块510通过调用GetModuleHandleEx函数获得窗口过程函数WndProcCallback当前所在模块的HMODULE句柄,调用函数RegisterClassEx注册自定义的窗口类Class,用于告诉操作系统当前模块的Handle句柄、接收消息的窗口过程函数WndProcCallback的地址等信息。
所述窗口创建模块520用于依据注册的所述窗口类创建隐藏窗口。
在本实施例中,当窗口类Class注册成功以后,窗口创建模块520依据注册的窗口类Class调用函数CreateWindow创建一个隐藏窗口,该隐藏窗口的属性由该窗口类Class指定,该隐藏窗口可通过窗口句柄HWND进行标识。由于该窗口类Class与窗口过程函数关联,则由该窗口类Class创建的隐藏窗口也与该窗口过程函数关联,因此该窗口过程函数可用于接收和处理该隐藏窗口的消息,并且该窗口过程函数是运行于UI线程中。例如,操作系统可依据窗口句柄HWND,将消息发送至与该窗口句柄对应的窗口,并调用与该窗口关联的窗口过程函数对消息进行处理。需要说明的是,本实施例中创建的隐藏窗口具有消息循环接口及自定义的消息循环过程,该隐藏窗口的消息循环由操作系统统一调度,并自动为该隐藏窗口维护一个系统级别的消息队列,具有回调速度快,自动优化队列消息、保证回调的线程安全等特性,可以保证在执行回调时UI线程的高响应度。
所述封装模块530用于将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行。
在本实施例中,当在工作线程中执行完毕后台操作后,首先调用std::bind函数把运行在工作线程中的回调函数的函数参数封装成一个独立的回调(callback)对象,然后调用PostTask(callback)函数,把该callback对象添加到任务队列中等待执行。具体地,在本实施例中,所述任务队列由用户自己定义,当多个工作线程进行时,在各工作线程内封装成的callback对象均可添加到该任务队列中等待执行。
所述标识模块540用于将所述消息用消息标识符进行标识。
在本实施例中,当把callback对象添加到任务队列中等待执行后,所述标识模块540用于将对来自工作线程的消息采用自定义的消息标识符kMsgHaveWork进行标识后再进行发送。
所述消息发送模块550用于向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息。
在本实施例中,所述消息发送模块550通过调用函数PostMessage(kMsgHaveWork),以向窗口过程函数WndProcCallback发送经消息标识符标识kMsgHaveWork标识的消息。也即是说,本实施例中消息发送模块550所发送的消息是一个自定义消息,具有消息标识符kMsgHaveWork。可以理解,操作系统所接收的消息不仅仅包括上述的自定义消息,还会包括其他类型的消息,因此,本实施例中通过该消息标识符kMsgHaveWork对这个自定义消息和其他类型消息加以区分。
所述调用模块560用于当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
在本实施例中,所述消息发送模块550是通过操作系统将所述消息发送至所述窗口过程函数WndProcCallback进行处理。具体地,在操作系统在接收到所述消息后,首先判断所述消息是否具有所述消息标识符kMsgHaveWork,如果是,即该消息是由消息标识符kMsgHaveWork标识的消息,则可通过该消息中的窗口句柄等参数调用所述窗口过程函数WndProcCallback(也即是将该消息发送给该窗口过程函数),由于这时所述窗口过程函数WndProcCallback是运行在UI线程中的,故通过该窗口过程函数WndProcCallback调用任务队列中等待执行的callback对象,使得callback对象成功运行于UI线程中,回调函数也相应地运行在UI线程环境中而执行,即达到了从工作线程向UI线程投递回调函数的目的,便于在任意工作线程中执行UI相关的界面更新的操作,进而实现UI更新界面的功能,还能避免UI线程在执行耗时的后台操作时,界面卡顿、没有响应,极大提高用户的体验感。如果所述操作系统接收到的所述消息没有所述消息标识符时,该窗口过程函数WndProcCallback不会对该消息进行处理,所述调用模块560则调用默认的消息处理接口DefWindowProc对所述消息进行处理。
第二实施例
请参照图3,为本发明第二实施例所提供的应用于客户端100的向UI线程投递回调函数的方法的流程示意图。需要说明的是,本发明实施例所述的向UI线程投递回调函数的方法并不以图3以及以下所述的具体顺序为限制,其基本原理及产生的技术效果与第一实施例相同,为简要描述,本实施例中未提及部分,可参考第一实施例中的相应内容。应当理解,在其它实施例中,本发明所述的向UI线程投递回调函数的方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。下面将对图3所示的具体流程进行详细阐述。
步骤S101,注册窗口类,其中,所述窗口类与所述窗口过程函数关联。
可以理解,该步骤S101可以由上述的窗口类注册模块510执行。
步骤S102,依据注册的所述窗口类创建隐藏窗口。
可以理解,该步骤S102可以由上述的窗口创建模块520执行。
步骤S103,将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行。
可以理解,该步骤S103可以由上述的封装模块530执行。
步骤S104,将所述消息用消息标识符进行标识。
可以理解,该步骤S104可以由上述的标识模块540执行。
步骤S105,向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息。
可以理解,该步骤S105可以由上述的消息发送模块550执行。
应当理解,在本实施例中,该步骤S104也可以是在执行步骤S105时执行,也即是说,当要发送所述消息时,对该消息采用自定义的消息标识符kMsgHaveWork进行标识后再进行发送。
步骤S106,当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
具体地,当所述操作系统接收到的所述消息具有所述消息标识符kMsgHaveWork后,则调用所述窗口过程函数WndProcCallback,由于窗口过程函数WndProcCallback是运行在UI线程中的,则依据窗口过程函数WndProcCallback调用callback对象可使callback对象成功运行于UI线程中,回调函数也相应运行在UI线程环境中而执行。
可以理解,该步骤S106可以由上述的调用模块560执行。
第三实施例
请参照图4,为本发明第三实施例所提供的应用于客户端100的向UI线程投递回调函数的方法的流程示意图。与第二实施例相比,其不同之处在于,本发明第三实施例所提供的向UI线程投递回调函数的方法还包括:
步骤S107,当所述操作系统接收到的所述消息没有所述消息标识符时,调用默认的消息处理接口对所述消息进行处理。
可以理解,该步骤S107是在步骤S105后执行的。也即是说,在本实施例中,在操作系统接收到所述消息后,要对该消息进行判断,如果该消息具有消息标识符kMsgHaveWork,则执行步骤S106;如果该消息没有消息标识符kMsgHaveWork,则执行该步骤S107。
可以理解,该步骤S107可以由上述的调用模块560执行。
综上所述,本发明实施例所提供的向UI线程投递回调函数的方法、装置及客户端,通过预先建立一个隐藏窗口以及负责接收和处理该窗口消息的窗口过程函数。当工作线程中执行完毕后台操作后,将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息,并对该消息用消息标识符进行标识;当操作系统接收到所述消息后,若所述消息具有所述消息标识符,则调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。当所述操作系统接收到的所述消息没有所述消息标识符时,调用默认的消息处理接口对所述消息进行处理。本发明实施例所提供的向UI线程投递回调函数的方法,由于隐藏窗口的消息循环由操作系统统一调度,并自动为该窗口维护一个系统级别的消息队列,具有回调速度快,自动优化队列消息,保证回调的线程安全等优点,保证了在执行回调时UI线程的高响应度。此外,通过自定义该隐藏窗口的消息循环过程,达到从工作线程向UI线程投递回调函数的目的,使回调函数运行在UI线程环境中,避免了UI更新接口调用失败,便于在任意工作线程中执行UI相关的更新操作,更新效果较好,同时也避免UI线程在执行耗时的后台操作时,界面卡顿、无响应,给用户的体验感较好。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

Claims (10)

1.一种向UI线程投递回调函数的方法,其特征在于,所述向UI线程投递回调函数的方法包括:
将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;
向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;
当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
2.如权利要求1所述的向UI线程投递回调函数的方法,其特征在于,所述向预设的运行于UI线程的窗口过程函数发送来自工作线程的消息的步骤之前包括:
将所述消息用消息标识符进行标识。
3.如权利要求2所述的向UI线程投递回调函数的方法,其特征在于,所述当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数的步骤包括:
当所述操作系统接收到的所述消息具有所述消息标识符时,调用所述窗口过程函数。
4.如权利要求2所述的向UI线程投递回调函数的方法,其特征在于,所述向UI线程投递回调函数的方法还包括:
当所述操作系统接收到的所述消息没有所述消息标识符时,调用默认的消息处理接口对所述消息进行处理。
5.如权利要求1所述的向UI线程投递回调函数的方法,其特征在于,所述向UI线程投递回调函数的方法还包括:
注册窗口类,其中,所述窗口类与所述窗口过程函数关联;
依据注册的所述窗口类创建隐藏窗口。
6.一种向UI线程投递回调函数的装置,其特征在于,所述向UI线程投递回调函数的装置包括:
封装模块,用于将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;
消息发送模块,用于向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;
调用模块,用于当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
7.如权利要求6所述的向UI线程投递回调函数的装置,其特征在于,所述向UI线程投递回调函数的装置还包括:
标识模块,用于将所述消息用消息标识符进行标识。
8.如权利要求7所述的向UI线程投递回调函数的装置,其特征在于,所述调用模块用于当所述操作系统接收到的所述消息具有所述消息标识符时,调用所述窗口过程函数。
9.如权利要求6所述的向UI线程投递回调函数的装置,其特征在于,所述向UI线程投递回调函数的装置还包括:
窗口类注册模块,用于注册窗口类,其中,所述窗口类与所述窗口过程函数关联;
窗口创建模块,用于依据注册的所述窗口类创建隐藏窗口。
10.一种客户端,其特征在于,所述客户端包括:
存储器;
处理器;及
向UI线程投递回调函数的装置,所述向UI线程投递回调函数的装置存储在所述存储器中并包括一个或多个由所述处理器执行的软件功能模块,所述向UI线程投递回调函数的装置包括:
封装模块,用于将运行于工作线程中的回调函数封装成回调对象并添加至任务队列中等待执行;
发送模块,用于向预设的运行于UI线程的窗口过程函数发送来自所述工作线程的消息;
调用模块,用于当操作系统接收到所述消息后,依据所述消息调用所述窗口过程函数,并依据所述窗口过程函数调用所述回调对象,以使所述回调函数运行于所述UI线程中。
CN201710789011.6A 2017-09-05 2017-09-05 向ui线程投递回调函数的方法、装置及客户端 Active CN107562540B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710789011.6A CN107562540B (zh) 2017-09-05 2017-09-05 向ui线程投递回调函数的方法、装置及客户端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710789011.6A CN107562540B (zh) 2017-09-05 2017-09-05 向ui线程投递回调函数的方法、装置及客户端

Publications (2)

Publication Number Publication Date
CN107562540A true CN107562540A (zh) 2018-01-09
CN107562540B CN107562540B (zh) 2021-03-12

Family

ID=60979197

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710789011.6A Active CN107562540B (zh) 2017-09-05 2017-09-05 向ui线程投递回调函数的方法、装置及客户端

Country Status (1)

Country Link
CN (1) CN107562540B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108509260A (zh) * 2018-01-31 2018-09-07 深圳市万普拉斯科技有限公司 线程识别处理方法、装置、计算机设备和存储介质
CN109117144A (zh) * 2018-07-10 2019-01-01 北京小米移动软件有限公司 页面处理方法、装置、终端及存储介质
CN113360302A (zh) * 2021-08-10 2021-09-07 成都市奇点软件有限公司 一种耗时操作取消及阻塞异步转换的方法及系统
CN113687879A (zh) * 2021-07-22 2021-11-23 成都鲁易科技有限公司 跨平台框架与平台交互库的交互方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1573700A (zh) * 2003-06-13 2005-02-02 微软公司 用于应用框架不可知的异步组件的机制
US20070204235A1 (en) * 2006-02-06 2007-08-30 Samsung Electronics Co., Ltd. Method for any ticker while the user is in any application session in a mobile communication device
CN101770395A (zh) * 2008-12-29 2010-07-07 上海科泰世纪科技有限公司 Applet线程模型及基于Applet线程模型的调用构件的方法
US20140380282A1 (en) * 2013-06-20 2014-12-25 Microsoft Corporation Monitoring mobile application performance
CN105450718A (zh) * 2014-09-30 2016-03-30 阿里巴巴集团控股有限公司 界面更新方法及客户端
CN106648816A (zh) * 2016-12-09 2017-05-10 武汉斗鱼网络科技有限公司 多线程处理系统及方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1573700A (zh) * 2003-06-13 2005-02-02 微软公司 用于应用框架不可知的异步组件的机制
US20070204235A1 (en) * 2006-02-06 2007-08-30 Samsung Electronics Co., Ltd. Method for any ticker while the user is in any application session in a mobile communication device
CN101770395A (zh) * 2008-12-29 2010-07-07 上海科泰世纪科技有限公司 Applet线程模型及基于Applet线程模型的调用构件的方法
US20140380282A1 (en) * 2013-06-20 2014-12-25 Microsoft Corporation Monitoring mobile application performance
CN105450718A (zh) * 2014-09-30 2016-03-30 阿里巴巴集团控股有限公司 界面更新方法及客户端
CN106648816A (zh) * 2016-12-09 2017-05-10 武汉斗鱼网络科技有限公司 多线程处理系统及方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
INEVERMORE: "使用C++11的function/bind组件封装Thread以及回调函数的使用", 《博客园(HTTPS://WWW.CNBLOGS.COM/INEVERMORE/P/4038498.HTML)》 *
LIHUA RUAN: "Simulation System for Airborne Weather Radar Control and Display Based on Virtual Instrument", 《JOURNAL OF SOFTWARE》 *
万涛: "MicrosoftWin32消息处理机制及应用编程", 《计算机工程》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108509260A (zh) * 2018-01-31 2018-09-07 深圳市万普拉斯科技有限公司 线程识别处理方法、装置、计算机设备和存储介质
CN108509260B (zh) * 2018-01-31 2021-08-13 深圳市万普拉斯科技有限公司 线程识别处理方法、装置、计算机设备和存储介质
CN109117144A (zh) * 2018-07-10 2019-01-01 北京小米移动软件有限公司 页面处理方法、装置、终端及存储介质
CN109117144B (zh) * 2018-07-10 2022-01-18 北京小米移动软件有限公司 页面处理方法、装置、终端及存储介质
CN113687879A (zh) * 2021-07-22 2021-11-23 成都鲁易科技有限公司 跨平台框架与平台交互库的交互方法及装置
CN113687879B (zh) * 2021-07-22 2023-05-05 成都鲁易科技有限公司 跨平台框架与平台交互库的交互方法及装置
CN113360302A (zh) * 2021-08-10 2021-09-07 成都市奇点软件有限公司 一种耗时操作取消及阻塞异步转换的方法及系统

Also Published As

Publication number Publication date
CN107562540B (zh) 2021-03-12

Similar Documents

Publication Publication Date Title
CN107562540A (zh) 向ui线程投递回调函数的方法、装置及客户端
US8237666B2 (en) Augmented I/O for limited form factor user-interfaces
US10063553B2 (en) Programmable display
CN103442060B (zh) 基于远程桌面本地应用访问方法及装置
CN107844243A (zh) 云桌面触摸屏实现方法及装置
CN106201207B (zh) 一种虚拟现实交互方法及装置
CN107608693A (zh) 版本升级方法及终端设备
US20170199642A1 (en) Display method of terminal device and terminal device
US20230197294A1 (en) Computerized data processing systems and methods for generating graphical user interfaces
CN102708329B (zh) 数据安全管理系统和方法
CN107391999B (zh) 封装其它凭据提供者的凭据提供者
US20140019603A1 (en) Systems and methods involving interactive queuing
CN108229980B (zh) 一种问题反馈的方法、装置及存储介质
CN106445378A (zh) 触控菜单显示控制方法、装置及触控显示设备
CN104182161A (zh) 一种开启屏幕功能区域的方法和装置
CN107506494A (zh) 文件处理方法、移动终端及计算机可读存储介质
CN110928706A (zh) 小程序交互方法、装置、电子设备及存储介质
CN107016262A (zh) 应用程序权限管理方法及客户端
JP6933987B2 (ja) 対話処理システム、及び対話処理方法
CN109254819A (zh) 基于安卓系统的界面更新方法、系统、设备及存储介质
JP3006610B1 (ja) ワ―クフロ―支援実行システム
CN105278812B (zh) 一种界面调整方法及终端
CN106484295A (zh) 一种密码找回方法及终端
CN106599642A (zh) 信息防泄露的方法及电子终端
CN107197345A (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