一種自動同步用戶界面ui線程的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種自動同步用戶界面(User Interface, UI)線程的方法及裝置。
【背景技術(shù)】
[0002] 在視窗操作系統(tǒng)Windows編程中,若操作UI更新的函數(shù)在工作線程里調(diào)用,則會 導致不可預(yù)知的結(jié)果或異常退出。
[0003] 目前的做法是程序員手動編碼、來指定消息類型以及消息處理函數(shù),然后在消息 處理函數(shù)中,再調(diào)用UI更新函數(shù),進行UI更新操作。
[0004] 但是,每個更新UI函數(shù)都必須對應(yīng)一個自定義消息,顯然過于繁瑣,導致程序復 雜,編碼量大。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實施例提供了一種自動同步用戶界面UI線程的方法及裝置,能夠省去自 定義消息的步驟,降低了程序的復雜度以及編碼量。
[0006] 有鑒于此,本發(fā)明第一方面提供了一種自動同步用戶界面UI線程的方法,可包 括:
[0007] 將待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù)保存在預(yù)定義的窗 口模板類中;
[0008] 從所述窗口模板類中調(diào)取所述UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù),并通過 固定的窗口消息攜帶所述UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù);
[0009] 向所述窗口模板類的窗口句柄發(fā)送所述窗口消息;
[0010] 接收所述窗口消息,并根據(jù)所述UI更新函數(shù)的參數(shù)執(zhí)行所述窗口消息中的所述 UI更新函數(shù)。
[0011] 可選的,
[0012] 所述將待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù)保存在預(yù)定義 的窗口模板類中,之前還包括:
[0013] 定義窗口模板類;
[0014] 接收來自窗口類的所述待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù)的參 數(shù);其中,所述窗口類為繼承所述窗口模板類的窗口類。
[0015] 可選的,
[0016] 所述將待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù)保存在預(yù)定義 的窗口模板類中,包括:
[0017] 將待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù),傳入預(yù)定義的窗 口模板類的一個鏈表容器中保存。
[0018] 可選的,
[0019] 所述鏈表容器包括:m_functions的列表;
[0020] 所述窗口模板類包括:C++窗口模板類。
[0021] 可選的,
[0022] 所述接收所述窗口消息,包括:
[0023] 通過所述窗口模板類的消息隊列,接收所述窗口消息。
[0024] 有鑒于此,本發(fā)明第二方面提供一種自動同步用戶界面UI線程的裝置,可包括:
[0025] 存儲單元,用于將待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù)保 存在預(yù)定義的窗口模板類中;
[0026] 處理單元,用于從所述窗口模板類中調(diào)取所述UI更新函數(shù)以及所述UI更新函數(shù) 的參數(shù),并通過固定的窗口消息攜帶所述UI更新函數(shù)以及所述UI更新函數(shù)的參數(shù);
[0027] 發(fā)送單元,用于向所述窗口模板類的窗口句柄發(fā)送所述窗口消息;
[0028] 接收單元,用于接收所述窗口消息;
[0029] 執(zhí)行單元,用于根據(jù)所述UI更新函數(shù)的參數(shù)執(zhí)行所述窗口消息中的所述UI更新 函數(shù)。
[0030] 可選的,
[0031] 所述裝置還包括:
[0032] 定義單元,用于定義窗口模板類;
[0033] 所述接收單元,還用于接收來自窗口類的所述待執(zhí)行的用戶界面UI更新函數(shù)以 及所述UI更新函數(shù)的參數(shù);其中,所述窗口類為繼承所述窗口模板類的窗口類。
[0034] 可選的,
[0035] 所述存儲單元,具體用于將待執(zhí)行的用戶界面UI更新函數(shù)以及所述UI更新函數(shù) 的參數(shù),傳入預(yù)定義的窗口模板類的一個鏈表容器中保存。
[0036] 可選的,
[0037] 所述鏈表容器包括:m_functions的列表;
[0038] 所述窗口模板類包括:C++窗口模板類。
[0039] 可選的,
[0040] 所述接收單元,具體用于通過所述窗口模板類的消息隊列,接收所述窗口消息。
[0041] 從以上技術(shù)方案可以看出,本發(fā)明實施例具有以下優(yōu)點:一般的窗口類,只需要繼 承窗口模板類,就能夠通過窗口模板類代替程序員完成自定義消息的收發(fā),UI更新函數(shù)的 調(diào)用,自動執(zhí)行UI更新函數(shù),不再需要現(xiàn)有技術(shù)中的自定義消息的步驟,因此,本發(fā)明能夠 省去自定義消息的步驟,降低了程序的復雜度以及編碼量。
【附圖說明】
[0042] 為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例描述中所需要使用 的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本 領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他 的附圖。
[0043] 圖1為本發(fā)明實施例方法流程示意圖;
[0044] 圖2為本發(fā)明實施例裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0045] 本發(fā)明實施例提供了一種自動同步用戶界面UI線程的方法及裝置,能夠省去自 定義消息的步驟,降低了程序的復雜度以及編碼量。
[0046] 為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實施例中的 附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是 本發(fā)明一部分的實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù) 人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當屬于本發(fā)明保護的范 圍。
[0047] 本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語"第一"、"第二"、"第三~第四" 等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理 解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的實施例能夠以除了在這里圖示 或描述的內(nèi)容以外的順序?qū)嵤4送?,術(shù)語"包括"和"具有"以及他們的任何變形,意圖在 于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必 限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、 產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0048] 請參閱圖1,本發(fā)明實施例中自動同步用戶界面UI線程的方法包括:
[0049] 101、將待執(zhí)行的用戶界面UI更新函數(shù)以及該UI更新函數(shù)的參數(shù)保存在預(yù)定義的 窗口模板類中;
[0050] 本實施例中,在獲取待執(zhí)行的用戶界面UI更新函數(shù)以及該更新函數(shù)的參數(shù)后,將 該UI更新函數(shù)以及該UI更新函數(shù)的參數(shù)保存在預(yù)定義的窗口模板類中。
[0051] 可選的,在本發(fā)明的一些實施例中,在執(zhí)行步驟101之前,還包括:
[0052] 定義窗口模板類;
[0053] 接收來自窗口類的上述待執(zhí)行的用戶界面UI更新函數(shù)以及該UI更新函數(shù)的參 數(shù);其中,該窗口類為繼承上述窗口模板類的窗口類。
[0054] 可選的,在本發(fā)明的一些實施例中,可以通過如下方法保存UI更新函數(shù)以及UI更 新函數(shù)的參數(shù):
[0055] 將待執(zhí)行的用戶界面UI更新函數(shù)以及該UI更新函數(shù)的參數(shù),傳入預(yù)定義的窗口 模板類的一個鏈表容器中保存。
[0056] 需要說明的是,上述鏈表容器包括:m_functions的列表;上述窗口模板類包括: C++窗口模板類。
[0057] 需要說明的是,上述m_functions的列表可以通過定義Functions模板類得到, Functions模板類用來保存UI更新函數(shù)以及UI更新函數(shù)的參數(shù),在實際應(yīng)用中,F(xiàn)unctions 模板類可以通過如下代碼實現(xiàn):
[0058] template<typename RETURN, typename Plj typename P2>
[0059] class Functions
[0060] {
[0061] private:
[0062] std: : list〈std: : function〈RETURN(Pl,P2) >>m-funcs ;// 存儲函數(shù)指針及參數(shù)D
[0063] };
[0064] Functions模板類用一個列表m_functions來保存UI更新函數(shù)以及UI更新函數(shù) 的參數(shù),Pl和P2代表窗口的兩個固定參數(shù)WPARAM和LPARAM,RETURN代表函數(shù)的返回類型。
[0065] Functions模板類用load方法將待執(zhí)行的UI更新函數(shù)以及該UI更新函數(shù)的參數(shù) 保存至隊列m_functions中。
[0066] template〈typename Object〉
[0067] void load(0bject*object, RETURN(Object::^method)(P1,P2))
[0068] {
[0069] m_funcs. push_back ([object, method] (Plpl, P2P2) {return (*object. *method) (pi, p2) ;});
[0070] }
[0071] 完成Functions模板類的定義后,上述窗口模板類可以通過如下代碼定義:
[0072] template<class T>
[0073] class UI_THREAD_0PERATI0N
[0074] {
[0075] public:
[0076] UI_THREAD_0PERATI0N():MESSAGE_SYNC_SEND(WM_USER+8088)
[0077] {
[0078] }
[0079] private:
[0080] const UINT MESSAGE_SYNC_SEND ;// 同步窗口消息,SendMes