一種多優(yōu)先級(jí)的線程消息處理方法
【專利摘要】本發(fā)明提供一種多優(yōu)先級(jí)的線程消息處理方法,提供了五種消息處理的不同優(yōu)先級(jí)設(shè)計(jì);不同優(yōu)先級(jí)線程消息的處理機(jī)制設(shè)計(jì);定制的線程消息路由設(shè)計(jì);通過該方法,可以使線程對(duì)消息處理的實(shí)時(shí)性與功能性得到顯著提高;該方案基于已有的操作系統(tǒng)消息機(jī)制進(jìn)行改進(jìn),成熟可靠;該方案適合于所有采用Windows平臺(tái),適用性廣;接口簡(jiǎn)單清晰,易于使用。
【專利說明】一種多優(yōu)先級(jí)的線程消息處理方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及消息處理【技術(shù)領(lǐng)域】,具體涉及一種多優(yōu)先級(jí)的線程消息處理方法。
【背景技術(shù)】
[0002] 現(xiàn)代頻譜分析儀等測(cè)量?jī)x器的軟件功能復(fù)雜,一般基于Windows系統(tǒng)并采用多線 程設(shè)計(jì),Windows系統(tǒng)中的消息機(jī)制成熟易用,但其線程消息處理接口只能處理異步消息, 若能將消息的易用性與多線程結(jié)合,使線程具備處理不同優(yōu)先級(jí)消息的能力,將大大提高 軟件的實(shí)時(shí)處理能力,同時(shí)豐富軟件的功能。
[0003] 在進(jìn)行多線程通信時(shí),常常采用事件或互斥等方法同步,雖然可以實(shí)現(xiàn)線程運(yùn)行 的同步,但無法在線程間傳遞參數(shù),對(duì)于測(cè)量?jī)x器的復(fù)雜功能受到較大限制。這種設(shè)計(jì)下實(shí) 現(xiàn)線程間參數(shù)傳遞的方式一般是采用額外的數(shù)據(jù)區(qū)進(jìn)行輔助通信,但數(shù)據(jù)區(qū)的設(shè)計(jì)因各種 具體設(shè)備與設(shè)計(jì)人員而定,接口形式很難統(tǒng)一,復(fù)用性幾乎不可實(shí)現(xiàn)。
[0004] 消息機(jī)制是具備靈活成熟可靠的特點(diǎn),可傳遞各種參數(shù),具備廣泛的適用性,但只 有窗口消息傳遞具備同步回調(diào)、同步優(yōu)先級(jí),線程消息傳遞僅有異步優(yōu)先級(jí),因此原有平臺(tái) 提供的功能并不滿足測(cè)量?jī)x器的軟件功能要求。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明的目的是提供一種多優(yōu)先級(jí)的線程消息處理方法,通過不同優(yōu)先級(jí)線程消 息的處理機(jī)制設(shè)計(jì),與特定的窗口關(guān)聯(lián),實(shí)現(xiàn)安全調(diào)用、直接調(diào)用,實(shí)現(xiàn)了各種線程優(yōu)先級(jí) 消息的處理能力。
[0006] 為達(dá)上述目的,本發(fā)明實(shí)施例提供了一種多優(yōu)先級(jí)的線程消息處理方法,包括:
[0007] 判斷消息的線程優(yōu)先級(jí);
[0008] 若所述消息為異步優(yōu)先級(jí),則通過Windows平臺(tái)提供的線程消息路由將該消息轉(zhuǎn) 發(fā)給線程預(yù)處理接口進(jìn)行預(yù)處理;進(jìn)行預(yù)處理后,發(fā)送到特定線程消息路由器;
[0009] 若所述消息為回調(diào)或同步優(yōu)先級(jí),則通過所述Windows平臺(tái)提供的線程消息路由 將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理,進(jìn)行窗口處理后,發(fā)送到所述特定線程消息路由器;
[0010] 若所述消息為安全調(diào)用優(yōu)先級(jí),則將該消息發(fā)送到所述特定線程消息路由器;
[0011] 若判斷所述消息為緊急調(diào)用,則將該消息發(fā)送到所述特定線程消息路由;
[0012] 通過所述特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處理所 述消息。
[0013] 進(jìn)一步的,所述判斷消息的線程優(yōu)先級(jí)具體為:
[0014] 若所述消息用于人機(jī)界面操作或?qū)μ幚頃r(shí)間順序無要求也無需提供處理反饋信 息的操作,則將該消息判定為異步優(yōu)先級(jí);否則判斷該消息是否為回調(diào)或同步優(yōu)先級(jí);
[0015] 若所述消息用于人機(jī)界面操作或?qū)μ幚頃r(shí)間順序無要求但需提供處理反饋信息 的操作,則將該消息判定為回調(diào)優(yōu)先級(jí);否則判斷該消息是否為安全調(diào)用;
[0016] 若所述消息對(duì)處理順序有要求,則將該消息判定為同步優(yōu)先級(jí);否則判斷該消息 是否為安全調(diào)用;
[0017] 若所述消息對(duì)處理順序有要求,但相比當(dāng)前同步處理還能更快響應(yīng)且不破壞當(dāng)前 消息的的處理,則判定該消息為安全調(diào)用優(yōu)先級(jí);否則判定該消息為對(duì)實(shí)時(shí)性要求級(jí)別最 高;若所述消息對(duì)實(shí)時(shí)性要求級(jí)別為最高,則判定該消息為緊急調(diào)用。
[0018] 進(jìn)一步的,所述通過所述特定線程消息路由器調(diào)用與優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處 理所述消息,具體包括:
[0019] 遍歷搜索線程的消息映射數(shù)據(jù);
[0020] 如搜索到消息對(duì)應(yīng)的處理接口,則由該消息對(duì)應(yīng)的處理接口進(jìn)行處理;
[0021] 否則通過Windows平臺(tái)提供的線程消息路由進(jìn)行處理。
[0022] 較佳的,所述將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理包括:窗口經(jīng)由自己消息路由機(jī)制進(jìn) 行到消息處理時(shí),再使用線程提供的處理接口;即,優(yōu)先級(jí)由窗口負(fù)責(zé),處理由線程負(fù)責(zé)。
[0023] 優(yōu)選的,若所述消息為異步優(yōu)先級(jí)、回調(diào)或同步優(yōu)先級(jí)、安全調(diào)用優(yōu)先級(jí)時(shí),所述 通過所述特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處理所述消息, 包括:
[0024] 判斷所述特定線程消息路由器是否鎖定;
[0025] 若鎖定,進(jìn)行線程同步,等上一個(gè)消息處理完后才能進(jìn)行當(dāng)前消息處理;
[0026] 若未鎖定,通過該特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接 口,處理所述消息,并同時(shí)進(jìn)行鎖定;
[0027] 其中,所述鎖定表示存在正在進(jìn)行處理的消息;所述未鎖定,表示不存在正在處理 的消息。
[0028] 進(jìn)一步的,所述將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理包括:
[0029] 具體由所述窗口的相應(yīng)接口進(jìn)行處理,該接口是所述Windows平臺(tái)提供的;
[0030] 在所述Windows平臺(tái)提供的窗口消息機(jī)制內(nèi)路由,最終交給所述窗口的窗口處理 做處理如的裁決;
[0031] 所述窗口處理將消息發(fā)送給線程提供的所述特定消息路由接口;
[0032] 其中,所述窗口是為線程定制的特殊窗口,該窗口不可見,且除了創(chuàng)建與關(guān)閉之外 不處理任何窗口消息。
[0033] 可選的,所述消息的數(shù)據(jù)格式與所述Windows平臺(tái)提供的數(shù)據(jù)格式相同。
[0034] 優(yōu)選的,該方法采用C++語言與面向?qū)ο笤O(shè)計(jì),通過統(tǒng)一的接口封裝內(nèi)部的消息 處理。
[0035] 上述技術(shù)方案具有如下有益效果:
[0036] 使線程對(duì)消息處理的實(shí)時(shí)性與功能性得到顯著提高;該方案基于已有的操作系統(tǒng) 消息機(jī)制進(jìn)行改進(jìn),成熟可靠;該方案適合于所有采用Windows平臺(tái),適用性廣;接口簡(jiǎn)單 清晰,易于使用。
【專利附圖】
【附圖說明】
[0037] 為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0038] 圖1是本發(fā)明實(shí)施例一的多優(yōu)先級(jí)的線程消息處理方法流程圖;
[0039] 圖2是本發(fā)明實(shí)施例的多優(yōu)先級(jí)的線程消息處理方法具體流程圖;
[0040] 圖3是本發(fā)明實(shí)施例特定線程消息路由器的路由流程圖。
【具體實(shí)施方式】
[0041] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0042] 基于現(xiàn)有技術(shù)中存在的上述問題,本發(fā)明在窗口消息處理與線程同步機(jī)制的基礎(chǔ) 上,通過線程與特定的窗口關(guān)聯(lián),使線程的接收的消息通過關(guān)聯(lián)的窗口處理,利用已有成熟 的窗口消息處理機(jī)制,并調(diào)用線程消息處理的接口實(shí)現(xiàn)線程消息的同步處理、回調(diào)處理;同 時(shí)利用線程同步機(jī)制,在使用消息處理接口前進(jìn)行消息處理同步判斷,實(shí)現(xiàn)安全調(diào)用、直接 調(diào)用,從而實(shí)現(xiàn)了各種線程優(yōu)先級(jí)消息的處理能力。
[0043] 實(shí)施例一
[0044] 圖1是本發(fā)明實(shí)施例一的一種多優(yōu)先級(jí)的線程消息處理方法的流程圖,包括:
[0045] 步驟101,判斷消息的線程優(yōu)先級(jí);
[0046] 步驟102,若所述消息為異步優(yōu)先級(jí),則通過Windows平臺(tái)提供的線程消息路由將 該消息轉(zhuǎn)發(fā)給線程預(yù)處理接口進(jìn)行預(yù)處理;進(jìn)行預(yù)處理后,發(fā)送到特定線程消息路由器;
[0047] 步驟103,若所述消息為回調(diào)或同步優(yōu)先級(jí),則通過所述Windows平臺(tái)提供的線程 消息路由將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理,進(jìn)行窗口處理后,發(fā)送到所述特定線程消息路由 器;
[0048] 步驟104,若所述消息為安全調(diào)用優(yōu)先級(jí),則將該消息發(fā)送到所述特定線程消息路 由器;
[0049] 步驟105,若判斷所述消息為緊急調(diào)用,則將該消息發(fā)送到所述特定線程消息路 由;
[0050] 步驟106,通過所述特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接 口,處理所述消息。
[0051] 如圖2所示,進(jìn)一步的,所述判斷消息的線程優(yōu)先級(jí)具體為:
[0052] 若所述消息用于人機(jī)界面操作或?qū)μ幚頃r(shí)間順序無要求也無需提供處理反饋信 息的操作,則將該消息判定為異步優(yōu)先級(jí);否則判斷該消息是否為回調(diào)或同步優(yōu)先級(jí);
[0053] 若所述消息用于人機(jī)界面操作或?qū)μ幚頃r(shí)間順序無要求但需提供處理反饋信息 的操作,則將該消息判定為回調(diào)優(yōu)先級(jí);否則判斷該消息是否為安全調(diào)用;
[0054] 若所述消息對(duì)處理順序有要求,則將該消息判定為同步優(yōu)先級(jí);否則判斷該消息 是否為安全調(diào)用;
[0055] 若所述消息對(duì)處理順序有要求,但相比當(dāng)前同步處理還能更快響應(yīng)且不破壞當(dāng)前 消息的的處理,則判定該消息為安全調(diào)用優(yōu)先級(jí);否則判定該消息為對(duì)實(shí)時(shí)性要求級(jí)別最 高;若所述消息對(duì)實(shí)時(shí)性要求級(jí)別為最高,則判定該消息為緊急調(diào)用。
[0056] 如圖3所示,進(jìn)一步的,所述通過所述特定線程消息路由器調(diào)用與優(yōu)先級(jí)對(duì)應(yīng)的 處理接口,處理所述消息,具體包括:
[0057] 遍歷搜索線程的消息映射數(shù)據(jù);
[0058] 如搜索到消息對(duì)應(yīng)的處理接口,則由該消息對(duì)應(yīng)的處理接口進(jìn)行處理;
[0059] 否則通過Windows平臺(tái)提供的線程消息路由進(jìn)行處理。
[0060] 較佳的,所述將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理包括:窗口經(jīng)由自己消息路由機(jī)制進(jìn) 行到消息處理時(shí),再使用線程提供的處理接口;即,優(yōu)先級(jí)由窗口負(fù)責(zé),處理由線程負(fù)責(zé)。
[0061] 優(yōu)選的,若所述消息為異步優(yōu)先級(jí)、回調(diào)或同步優(yōu)先級(jí)、安全調(diào)用優(yōu)先級(jí)時(shí),所述 通過所述特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處理所述消息, 包括:
[0062] 判斷所述特定線程消息路由器是否鎖定;
[0063] 若鎖定,進(jìn)行線程同步,等上一個(gè)消息處理完后才能進(jìn)行當(dāng)前消息處理;
[0064] 若未鎖定,通過該特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接 口,處理所述消息,并同時(shí)進(jìn)行鎖定;
[0065] 其中,所述鎖定表示存在正在進(jìn)行處理的消息;所述未鎖定,表示不存在正在處理 的消息。
[0066] 進(jìn)一步的,所述將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理包括:
[0067] 具體由所述窗口的相應(yīng)接口進(jìn)行處理,該接口是所述Windows平臺(tái)提供的;
[0068] 在所述Windows平臺(tái)提供的窗口消息機(jī)制內(nèi)路由,最終交給所述窗口的窗口處理 做處理如的裁決;
[0069] 所述窗口處理將消息發(fā)送給線程提供的所述特定消息路由接口;
[0070] 其中,所述窗口是為線程定制的特殊窗口,該窗口不可見,且除了創(chuàng)建與關(guān)閉之外 不處理任何窗口消息。
[0071] 可選的,所述消息的數(shù)據(jù)格式與所述Windows平臺(tái)提供的數(shù)據(jù)格式相同。
[0072] 優(yōu)選的,該方法采用C++語言與面向?qū)ο笤O(shè)計(jì),通過統(tǒng)一的接口封裝內(nèi)部的消息 處理。
[0073] 本實(shí)施例具有如下有益效果:
[0074] 本實(shí)施例的方法,使線程對(duì)消息處理的實(shí)時(shí)性與功能性得到顯著提高;該方案基 于已有的操作系統(tǒng)消息機(jī)制進(jìn)行改進(jìn),成熟可靠;該方案適合于所有采用Windows平臺(tái),適 用性廣;接口簡(jiǎn)單清晰,易于使用。
[0075] 實(shí)施例二
[0076] 本實(shí)施例二將對(duì)線程消息優(yōu)先級(jí)機(jī)制進(jìn)行說明。
[0077] 本實(shí)施例二所要解決的技術(shù)問題包括:
[0078] 將線程處理消息的優(yōu)先級(jí)從一級(jí)擴(kuò)充為五級(jí),增強(qiáng)消息處理的實(shí)時(shí)性與功能性;
[0079] 消息處理的機(jī)制基于已有的平臺(tái)進(jìn)行擴(kuò)充,成熟可靠;
[0080] 消息處理的接口清晰簡(jiǎn)單、具有良好的復(fù)用性。
[0081] 1、實(shí)施例一所提供的方法所使用的線程消息優(yōu)先級(jí)機(jī)制如表1所示:
[0082]
【權(quán)利要求】
1. 一種多優(yōu)先級(jí)的線程消息處理方法,其特征在于,包括: 判斷消息的線程優(yōu)先級(jí); 若所述消息為異步優(yōu)先級(jí),則通過Windows平臺(tái)提供的線程消息路由將該消息轉(zhuǎn)發(fā)給 線程預(yù)處理接口進(jìn)行預(yù)處理;進(jìn)行預(yù)處理后,發(fā)送到特定線程消息路由器; 若所述消息為回調(diào)或同步優(yōu)先級(jí),則通過所述Windows平臺(tái)提供的線程消息路由將該 消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理,進(jìn)行窗口處理后,發(fā)送到所述特定線程消息路由器; 若所述消息為安全調(diào)用優(yōu)先級(jí),則將該消息發(fā)送到所述特定線程消息路由器; 若判斷所述消息為緊急調(diào)用,則將該消息發(fā)送到所述特定線程消息路由; 通過所述特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處理所述消 肩、。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述判斷消息的線程優(yōu)先級(jí)具體為: 若所述消息用于人機(jī)界面操作或?qū)μ幚頃r(shí)間順序無要求也無需提供處理反饋信息的 操作,則將該消息判定為異步優(yōu)先級(jí);否則判斷該消息是否為回調(diào)或同步優(yōu)先級(jí); 若所述消息用于人機(jī)界面操作或?qū)μ幚頃r(shí)間順序無要求但需提供處理反饋信息的操 作,則將該消息判定為回調(diào)優(yōu)先級(jí);否則判斷該消息是否為安全調(diào)用; 若所述消息對(duì)處理順序有要求,則將該消息判定為同步優(yōu)先級(jí);否則判斷該消息是否 為安全調(diào)用; 若所述消息對(duì)處理順序有要求,但相比當(dāng)前同步處理還能更快響應(yīng)且不破壞當(dāng)前消息 的的處理,則判定該消息為安全調(diào)用優(yōu)先級(jí);否則判定該消息為對(duì)實(shí)時(shí)性要求級(jí)別最高; 若所述消息對(duì)實(shí)時(shí)性要求級(jí)別為最高,則判定該消息為緊急調(diào)用。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述通過所述特定線程消息路由器調(diào)用 與優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處理所述消息,具體包括: 遍歷搜索線程的消息映射數(shù)據(jù); 如搜索到消息對(duì)應(yīng)的處理接口,則由該消息對(duì)應(yīng)的處理接口進(jìn)行處理; 否則通過Windows平臺(tái)提供的線程消息路由進(jìn)行處理。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理包括: 窗口經(jīng)由自己消息路由機(jī)制進(jìn)行到消息處理時(shí),再使用線程提供的處理接口;即,優(yōu)先級(jí)由 窗口負(fù)責(zé),處理由線程負(fù)責(zé)。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,若所述消息為異步優(yōu)先級(jí)、回調(diào)或同步優(yōu) 先級(jí)、安全調(diào)用優(yōu)先級(jí)時(shí),所述通過所述特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì) 應(yīng)的處理接口,處理所述消息,包括: 判斷所述特定線程消息路由器是否鎖定; 若鎖定,進(jìn)行線程同步,等上一個(gè)消息處理完后才能進(jìn)行當(dāng)前消息處理; 若未鎖定,通過該特定線程消息路由器調(diào)用與所述消息的優(yōu)先級(jí)對(duì)應(yīng)的處理接口,處 理所述消息,并同時(shí)進(jìn)行鎖定; 其中,所述鎖定表示存在正在進(jìn)行處理的消息;所述未鎖定,表示不存在正在處理的消 肩、。
6. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述將該消息轉(zhuǎn)發(fā)給窗口進(jìn)行處理包括: 具體由所述窗口的相應(yīng)接口進(jìn)行處理,該接口是所述Windows平臺(tái)提供的; 在所述Windows平臺(tái)提供的窗口消息機(jī)制內(nèi)路由,最終交給所述窗口的窗口處理做處 理如的裁決; 所述窗口處理將消息發(fā)送給線程提供的所述特定消息路由接口; 其中,所述窗口是為線程定制的特殊窗口,該窗口不可見,且除了創(chuàng)建與關(guān)閉之外不處 理任何窗口消息。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述消息的數(shù)據(jù)格式與所述Windows平臺(tái) 提供的數(shù)據(jù)格式相同。
8. 根據(jù)權(quán)利要求1-7任一項(xiàng)所述的方法,其特征在于,該方法采用C++語言與面向?qū)ο?設(shè)計(jì),通過統(tǒng)一的接口封裝內(nèi)部的消息處理。
【文檔編號(hào)】G06F9/54GK104391752SQ201410734742
【公開日】2015年3月4日 申請(qǐng)日期:2014年12月4日 優(yōu)先權(quán)日:2014年12月4日
【發(fā)明者】馬風(fēng)軍 申請(qǐng)人:中國(guó)電子科技集團(tuán)公司第四十一研究所