CN105159690B - 一种自动同步用户界面ui线程的方法及装置 - Google Patents
一种自动同步用户界面ui线程的方法及装置 Download PDFInfo
- Publication number
- CN105159690B CN105159690B CN201510702698.6A CN201510702698A CN105159690B CN 105159690 B CN105159690 B CN 105159690B CN 201510702698 A CN201510702698 A CN 201510702698A CN 105159690 B CN105159690 B CN 105159690B
- Authority
- CN
- China
- Prior art keywords
- window
- renewal function
- class
- template
- parameter
- 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.)
- Active
Links
Abstract
本发明实施例公开了一种自动同步用户界面UI线程的方法及装置,能够省去自定义消息的步骤,降低了程序的复杂度以及编码量。本发明实施例方法包括:将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中;从所述窗口模板类中调取所述UI更新函数以及所述UI更新函数的参数,并通过固定的窗口消息携带所述UI更新函数以及所述UI更新函数的参数;向所述窗口模板类的窗口句柄发送所述窗口消息;接收所述窗口消息,并根据所述UI更新函数的参数执行所述窗口消息中的所述UI更新函数。
Description
技术领域
本发明涉及互联网技术领域,尤其涉及一种自动同步用户界面(User Interface,UI)线程的方法及装置。
背景技术
在视窗操作系统Windows编程中,若操作UI更新的函数在工作线程里调用,则会导致不可预知的结果或异常退出。
目前的做法是程序员手动编码、来指定消息类型以及消息处理函数,然后在消息处理函数中,再调用UI更新函数,进行UI更新操作。
但是,每个更新UI函数都必须对应一个自定义消息,显然过于繁琐,导致程序复杂,编码量大。
发明内容
本发明实施例提供了一种自动同步用户界面UI线程的方法及装置,能够省去自定义消息的步骤,降低了程序的复杂度以及编码量。
有鉴于此,本发明第一方面提供了一种自动同步用户界面UI线程的方法,可包括:
将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中;
从所述窗口模板类中调取所述UI更新函数以及所述UI更新函数的参数,并通过固定的窗口消息携带所述UI更新函数以及所述UI更新函数的参数;
向所述窗口模板类的窗口句柄发送所述窗口消息;
接收所述窗口消息,并根据所述UI更新函数的参数执行所述窗口消息中的所述UI更新函数。
可选的,
所述将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中,之前还包括:
定义窗口模板类;
接收来自窗口类的所述待执行的用户界面UI更新函数以及所述UI更新函数的参数;其中,所述窗口类为继承所述窗口模板类的窗口类。
可选的,
所述将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中,包括:
将待执行的用户界面UI更新函数以及所述UI更新函数的参数,传入预定义的窗口模板类的一个链表容器中保存。
可选的,
所述链表容器包括:m_functions的列表;
所述窗口模板类包括:C++窗口模板类。
可选的,
所述接收所述窗口消息,包括:
通过所述窗口模板类的消息队列,接收所述窗口消息。
有鉴于此,本发明第二方面提供一种自动同步用户界面UI线程的装置,可包括:
存储单元,用于将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中;
处理单元,用于从所述窗口模板类中调取所述UI更新函数以及所述UI更新函数的参数,并通过固定的窗口消息携带所述UI更新函数以及所述UI更新函数的参数;
发送单元,用于向所述窗口模板类的窗口句柄发送所述窗口消息;
接收单元,用于接收所述窗口消息;
执行单元,用于根据所述UI更新函数的参数执行所述窗口消息中的所述UI更新函数。
可选的,
所述装置还包括:
定义单元,用于定义窗口模板类;
所述接收单元,还用于接收来自窗口类的所述待执行的用户界面UI更新函数以及所述UI更新函数的参数;其中,所述窗口类为继承所述窗口模板类的窗口类。
可选的,
所述存储单元,具体用于将待执行的用户界面UI更新函数以及所述UI更新函数的参数,传入预定义的窗口模板类的一个链表容器中保存。
可选的,
所述链表容器包括:m_functions的列表;
所述窗口模板类包括:C++窗口模板类。
可选的,
所述接收单元,具体用于通过所述窗口模板类的消息队列,接收所述窗口消息。
从以上技术方案可以看出,本发明实施例具有以下优点:一般的窗口类,只需要继承窗口模板类,就能够通过窗口模板类代替程序员完成自定义消息的收发,UI更新函数的调用,自动执行UI更新函数,不再需要现有技术中的自定义消息的步骤,因此,本发明能够省去自定义消息的步骤,降低了程序的复杂度以及编码量。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例方法流程示意图;
图2为本发明实施例装置结构示意图。
具体实施方式
本发明实施例提供了一种自动同步用户界面UI线程的方法及装置,能够省去自定义消息的步骤,降低了程序的复杂度以及编码量。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,本发明实施例中自动同步用户界面UI线程的方法包括:
101、将待执行的用户界面UI更新函数以及该UI更新函数的参数保存在预定义的窗口模板类中;
本实施例中,在获取待执行的用户界面UI更新函数以及该更新函数的参数后,将该UI更新函数以及该UI更新函数的参数保存在预定义的窗口模板类中。
可选的,在本发明的一些实施例中,在执行步骤101之前,还包括:
定义窗口模板类;
接收来自窗口类的上述待执行的用户界面UI更新函数以及该UI更新函数的参数;其中,该窗口类为继承上述窗口模板类的窗口类。
可选的,在本发明的一些实施例中,可以通过如下方法保存UI更新函数以及UI更新函数的参数:
将待执行的用户界面UI更新函数以及该UI更新函数的参数,传入预定义的窗口模板类的一个链表容器中保存。
需要说明的是,上述链表容器包括:m_functions的列表;上述窗口模板类包括:C++窗口模板类。
需要说明的是,上述m_functions的列表可以通过定义Functions模板类得到,Functions模板类用来保存UI更新函数以及UI更新函数的参数,在实际应用中,Functions模板类可以通过如下代码实现:
template<typename RETURN,typename P1,typename P2>
class Functions
{
private:
std::list<std::function<RETURN(P1,P2)>>m_funcs;//存储函数指针及参数。
};
Functions模板类用一个列表m_functions来保存UI更新函数以及UI更新函数的参数,P1和P2代表窗口的两个固定参数WPARAM和LPARAM,RETURN代表函数的返回类型。
Functions模板类用load方法将待执行的UI更新函数以及该UI更新函数的参数保存至队列m_functions中。
template<typename Object>
void load(Object*object,RETURN(Object::*method)(P1,P2))
{
m_funcs.push_back([object,method](P1p1,P2p2){return(*object.*method)(p1,p2);});
}
完成Functions模板类的定义后,上述窗口模板类可以通过如下代码定义:
template<class T>
class UI_THREAD_OPERATION
{
public:
UI_THREAD_OPERATION():MESSAGE_SYNC_SEND(WM_USER+8088)
{
}
private:
const UINT MESSAGE_SYNC_SEND;//同步窗口消息,SendMessage方式。
Functions<LRESULT,WPARAM,LPARAM>m_functions;//保存传入的函数指针。
};
102、从该窗口模板类中调取上述UI更新函数以及上述UI更新函数的参数,并通过固定的窗口消息携带上述UI更新函数以及上述UI更新函数的参数;
在将待执行的UI更新函数以及UI更新函数的参数保存在窗口模板类中后,从该窗口模板类中调取该UI更新函数以及UI更新函数的参数,并将UI更新函数和UI更新函数的参数放在固定的窗口消息中。
需要说明的是,若上述UI更新函数以及UI更新函数的参数保存在Functions模板类中,则Functions模板类可以采用execute方法将UI更新函数以及UI更新函数的参数取出,另外,下文中需要介绍的根据UI更新函数的参数执行窗口消息中的UI更新函数,可以通过如下代码实现:
RETURN execute(P1p1,P2p2)
{
auto call_function=m_funcs.front();
if(call_function)
{
m_funcs.pop_front();
return call_function(p1,p2);
}
return NULL;
}
另外,上述窗口模板类定义了一个ui_thread_sync方法,用于保存需要执行的函数(Object)及参数(WPARAM和LPARAM),保存完后,该窗口模板类会对自己发送一个窗口消息MESSAGE_SYNC_SEND,将要执行的参数(wParam和lParam),放入至窗口消息中。可以通过如下代码实现:
103、向该窗口模板类的窗口句柄发送该窗口消息;
在将UI更新函数和UI更新函数的参数放到一个固定的窗口消息中后,向该窗口模板类的窗口句柄发送该窗口消息,具体实现代码可以参阅上述代码。
104、接收该窗口消息,并根据上述UI更新函数的参数执行该窗口消息中的上述UI更新函数。
在向该窗口模板类的窗口句柄发送该窗口消息后,接收到该窗口消息,并根据UI更新函数的参数执行该窗口消息中的UI更新函数。
可选的,在本发明的一些实施例中,具体可以采用如下方法接收该窗口消息:
通过该窗口模板类的消息队列,接收该窗口消息。
需要说明的是,上述窗口模板类的消息队列用于接收派生窗口的消息。
需要说明的是,在通过窗口模板类的消息队列接收到该窗口消息后,可以使用Functions模板类中的execute方法,将要执行的UI更新函数以及UI更新函数的参数从上述消息队列中取出,然后执行该UI更新函数,参见如下代码:
另外,根据UI更新函数的参数执行该窗口消息中的UI更新函数的具体代码在前文中已经叙述,此处不再赘述。
需要说明的是,完成窗口模板类的定义后,一般的窗口类,只需要继承该窗口模板类,并将待执行的UI更新函数以及UI更新函数的参数,传递给该窗口模板类,就能够自动执行该UI更新函数,而不再需要定义窗口消息和在窗口类的消息泵中加入自定义消息,以及自定义消息的处理函数。参见如下代码:
本实施例中,一般的窗口类,只需要继承窗口模板类,就能够通过窗口模板类代替程序员完成自定义消息的收发,UI更新函数的调用,自动执行UI更新函数,不再需要现有技术中的自定义消息的步骤,因此,本发明能够省去自定义消息的步骤,降低了程序的复杂度以及编码量。
下面介绍本发明实施例中的自动同步用户界面UI线程的装置,请参阅图2,本发明实施例中的自动同步UI线程的装置包括:
存储单元201,用于将待执行的用户界面UI更新函数以及UI更新函数的参数保存在预定义的窗口模板类中;
处理单元202,用于从窗口模板类中调取UI更新函数以及UI更新函数的参数,并通过固定的窗口消息携带UI更新函数以及UI更新函数的参数;
发送单元203,用于向窗口模板类的窗口句柄发送窗口消息;
接收单元204,用于接收窗口消息;
执行单元205,用于根据UI更新函数的参数执行窗口消息中的UI更新函数。
可选的,在本发明的一些实施例中,该装置还包括:
定义单元,用于定义窗口模板类;
上述接收单元204,还用于接收来自窗口类的待执行的用户界面UI更新函数以及UI更新函数的参数;其中,窗口类为继承窗口模板类的窗口类。
可选的,在本发明的一些实施例中,上述存储单元201,具体用于将待执行的用户界面UI更新函数以及UI更新函数的参数,传入预定义的窗口模板类的一个链表容器中保存。
可选的,在本发明的一些实施例中,上述接收单元204,具体用于通过窗口模板类的消息队列,接收窗口消息。
本实施例中,一般的窗口类,只需要继承窗口模板类,就能够通过窗口模板类代替程序员完成自定义消息的收发,UI更新函数的调用,自动执行UI更新函数,不再需要现有技术中的自定义消息的步骤,因此,本发明能够省去自定义消息的步骤,降低了程序的复杂度以及编码量。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (8)
1.一种自动同步用户界面UI线程的方法,其特征在于,包括:
定义窗口模板类;
接收来自窗口类的待执行的用户界面UI更新函数以及所述UI更新函数的参数;其中,所述窗口类为继承所述窗口模板类的窗口类;
将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中;
从所述窗口模板类中调取所述UI更新函数以及所述UI更新函数的参数,并通过固定的窗口消息携带所述UI更新函数以及所述UI更新函数的参数;
向所述窗口模板类的窗口句柄发送所述窗口消息;
接收所述窗口消息,并根据所述UI更新函数的参数执行所述窗口消息中的所述UI更新函数。
2.根据权利要求1所述的方法,其特征在于,所述将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中,包括:
将待执行的用户界面UI更新函数以及所述UI更新函数的参数,传入预定义的窗口模板类的一个链表容器中保存。
3.根据权利要求2所述的方法,其特征在于,
所述链表容器包括:m_functions的列表;
所述窗口模板类包括:C++窗口模板类。
4.根据权利要求1所述的方法,其特征在于,所述接收所述窗口消息,包括:
通过所述窗口模板类的消息队列,接收所述窗口消息。
5.一种自动同步用户界面UI线程的装置,其特征在于,包括:
定义单元,用于定义窗口模板类;
接收单元,用于接收来自窗口类的待执行的用户界面UI更新函数以及所述UI更新函数的参数;其中,所述窗口类为继承所述窗口模板类的窗口类;
存储单元,用于将待执行的用户界面UI更新函数以及所述UI更新函数的参数保存在预定义的窗口模板类中;
处理单元,用于从所述窗口模板类中调取所述UI更新函数以及所述UI更新函数的参数,并通过固定的窗口消息携带所述UI更新函数以及所述UI更新函数的参数;
发送单元,用于向所述窗口模板类的窗口句柄发送所述窗口消息;
所述接收单元,还用于接收所述窗口消息;
执行单元,用于根据所述UI更新函数的参数执行所述窗口消息中的所述UI更新函数。
6.根据权利要求5所述的装置,其特征在于,
所述存储单元,具体用于将待执行的用户界面UI更新函数以及所述UI更新函数的参数,传入预定义的窗口模板类的一个链表容器中保存。
7.根据权利要求6所述的装置,其特征在于,
所述链表容器包括:m_functions的列表;
所述窗口模板类包括:C++窗口模板类。
8.根据权利要求5所述的装置,其特征在于,
所述接收单元,具体用于通过所述窗口模板类的消息队列,接收所述窗口消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510702698.6A CN105159690B (zh) | 2015-10-26 | 2015-10-26 | 一种自动同步用户界面ui线程的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510702698.6A CN105159690B (zh) | 2015-10-26 | 2015-10-26 | 一种自动同步用户界面ui线程的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105159690A CN105159690A (zh) | 2015-12-16 |
CN105159690B true CN105159690B (zh) | 2019-06-28 |
Family
ID=54800557
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510702698.6A Active CN105159690B (zh) | 2015-10-26 | 2015-10-26 | 一种自动同步用户界面ui线程的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105159690B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107015850A (zh) * | 2016-01-28 | 2017-08-04 | 博雅网络游戏开发(深圳)有限公司 | 线程调度方法和装置 |
CN107506184A (zh) * | 2017-08-07 | 2017-12-22 | 上海青橙实业有限公司 | 系统应用消息的处理方法和装置 |
CN110806867B (zh) * | 2018-08-06 | 2022-06-17 | 武汉斗鱼网络科技有限公司 | 一种Handle管理方法、存储介质、电子设备及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902325A (zh) * | 2012-12-28 | 2014-07-02 | 北京新媒传信科技有限公司 | 实现窗口同步的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090319933A1 (en) * | 2008-06-21 | 2009-12-24 | Microsoft Corporation | Transacted double buffering for graphical user interface rendering |
-
2015
- 2015-10-26 CN CN201510702698.6A patent/CN105159690B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103902325A (zh) * | 2012-12-28 | 2014-07-02 | 北京新媒传信科技有限公司 | 实现窗口同步的方法和装置 |
Non-Patent Citations (1)
Title |
---|
WTL_消息处理;lk_flhs_107;《https://wenku.baidu.com/view/dc2c0d8b6529647d2728522c.html》;20110323;正文第5页第1段-第10页最后第1段及其中的代码 |
Also Published As
Publication number | Publication date |
---|---|
CN105159690A (zh) | 2015-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
CN105159690B (zh) | 一种自动同步用户界面ui线程的方法及装置 | |
RU2009139248A (ru) | Способы и устройства для осуществления операций по дереву каналов | |
CN106997394B (zh) | 一种数据乱序到达处理方法和系统 | |
CN103235835A (zh) | 用于数据库集群的查询实现方法和装置 | |
CN103067597B (zh) | 移动终端开机任务执行方法 | |
CN104657481B (zh) | 一种存储、查询数据的方法及装置 | |
CA2622835A1 (en) | Email server for processing a threshold number of email jobs for a given user and related methods | |
CN103345427A (zh) | 基于Android消息处理机制的视图切换系统及方法 | |
CN110428824A (zh) | 一种智能音箱的交互方法、装置及智能音箱 | |
CN105892667B (zh) | 一种虚拟现实场景下的信息处理方法和电子设备 | |
CN110427134A (zh) | 即时通讯的数据处理方法、装置、设备及可读存储介质 | |
CN109960186B (zh) | 控制流程的处理方法、装置、电子设备和存储介质 | |
CN109871270B (zh) | 调度方案生成方法及装置 | |
CN103034480B (zh) | 一种嵌入式系统定时器实现方法 | |
CN104185096A (zh) | 一种onu注册授权方法及系统 | |
CN109146765A (zh) | 一种图像处理方法、主处理器、协处理器及电子设备 | |
CN109144750B (zh) | 一种消息处理方法、装置、电子设备及存储介质 | |
CN104715188B (zh) | 一种基于绑定终端的应用实现方法及装置 | |
CN107888677B (zh) | 一种通信实现方法、控制端、智能设备及系统 | |
CN109086115B (zh) | Android动画执行方法、装置、终端及可读介质 | |
US9239720B2 (en) | Device and method for generating application model based on layered structure | |
CN109542617A (zh) | 系统资源的处理方法及装置 | |
CN109062620B (zh) | Android帧动画执行方法、装置、终端及可读介质 | |
CN109348041A (zh) | 一种应用程序联网控制方法、装置、存储介质及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |