專利名稱:一種圖形設(shè)備接口資源管理方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及資源管理技術(shù),特別涉及一種圖形設(shè)備接口(⑶I, Graphic DeviceInterface)資源管理方法和裝置。
背景技術(shù):
⑶I資源是由系統(tǒng)內(nèi)核程序“Gdiexe”管理的資源,用于保存畫刷、畫筆、字體、調(diào)色板等圖形對象信息。可以認(rèn)為,GDI資源是由一系列的GDI資源對象組成?,F(xiàn)有技術(shù)中,當(dāng)一系統(tǒng)進(jìn)程需要訪問一 GDI資源對象時,會調(diào)用CreateFont、: :CreateSolidBrush或CreatePen等全局函數(shù),由這些全局函數(shù)來創(chuàng)建GDI資源對象,并返回GDI句柄,后續(xù)可利用GDI句柄來對GDI資源對象進(jìn)行訪問;之后的某一時刻,如果要訪問另一⑶I資源對象,重復(fù)上述過程。但是,上述方式在實際應(yīng)用中會存在一定的問題,如如果前后兩次要訪問的GDI資源對象相同,所述相同是指種類和屬性均相同,其中,種類是指畫刷、畫筆、字體等,屬性是指畫刷的顏色,畫筆的風(fēng)格、大小、顏色,字體的種類、大小、粗細(xì)、斜體屬性以及是否有下劃線等;那么按照現(xiàn)有方式,即使之前已經(jīng)創(chuàng)建了相同的⑶I資源對象,下一次仍會重新創(chuàng)建,即相同的GDI資源對象被重復(fù)創(chuàng)建,從而導(dǎo)致GDI資源利用率降低、系統(tǒng)開銷增大以及系統(tǒng)內(nèi)存占用增大等問題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供一種⑶I資源管理方法和裝置,能夠提高⑶I資源的利用率,降低系統(tǒng)開銷,并減少系統(tǒng)內(nèi)存的占用。為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的一種⑶I資源管理方法,包括當(dāng)訪問方需要訪問一⑶I資源對象時,向資源池發(fā)送創(chuàng)建請求;所述資源池確定自身是否保存有所述GDI資源對象,如果否,則創(chuàng)建所述GDI資源對象及其句柄,進(jìn)行保存,并返回所述GDI資源對象的句柄,如果是,則返回所述GDI資源對象的句柄;所述訪問方利用所述資源池返回的句柄訪問所述GDI資源對象。一種⑶I資源管理裝置,包括訪問模塊和資源池;所述訪問模塊,用于當(dāng)需要訪問一⑶I資源對象時,向所述資源池發(fā)送創(chuàng)建請求,并利用所述資源池返回的句柄訪問所述GDI資源對象;所述資源池,用于在接收到所述創(chuàng)建請求后,確定自身是否保存有所述GDI資源對象,如果否,則創(chuàng)建所述GDI資源對象及其句柄,進(jìn)行保存,并返回所述GDI資源對象的句柄,如果是,則返回所述GDI資源對象的句柄??梢姡捎帽景l(fā)明所述方案,如果要訪問的⑶I資源對象已經(jīng)保存在了資源池中,即之前已經(jīng)創(chuàng)建過了,則不再重新創(chuàng)建,從而盡可能地避免了出現(xiàn)相同的⑶I資源對象被重復(fù)創(chuàng)建的問題,進(jìn)而提高了 GDI資源的利用率,降低了系統(tǒng)開銷,并減少了系統(tǒng)內(nèi)存的占用等;另外,本發(fā)明所述方案實現(xiàn)起來簡單方便,便于普及和推廣。
圖1為本發(fā)明⑶I資源管理方法實施例的流程圖。圖2為本發(fā)明⑶I資源管理方法較佳實施例的流程圖。圖3為對應(yīng)圖2所示過程的一個具體示例示意圖。圖4為本發(fā)明⑶I資源管理裝置實施例的組成結(jié)構(gòu)示意圖。
具體實施例方式針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明中提出一種GDI資源管理方案,能夠提高GDI資源的利用率,降低系統(tǒng)開銷,并減少系統(tǒng)內(nèi)存的占用等。圖1為本發(fā)明⑶I資源管理方法實施例的流程圖。如圖1所示,包括以下步驟步驟11 :當(dāng)訪問方需要訪問一⑶I資源對象時,向資源池發(fā)送創(chuàng)建請求。所述訪問方可以是指一系統(tǒng)進(jìn)程等。資源池是指資源的集合,可有效地保存和管理資源。步驟12 :資源池確定自身是否保存有該GDI資源對象,如果否,則創(chuàng)建該GDI資源對象及其句柄,進(jìn)行保存,并返回該GDI資源對象的句柄,如果是,則返回該GDI資源對象的句柄。步驟11 12中,當(dāng)訪問方需要訪問一⑶I資源對象,假設(shè)為GDI資源對象X時,可首先生成⑶I資源對象X的資源鍵,之后,將生成的資源鍵攜帶在創(chuàng)建請求中發(fā)送給資源池;資源池確定自身是否保存有接收到的資源鍵,如果否,則根據(jù)接收到的資源鍵創(chuàng)建該GDI資源對象及其句柄,進(jìn)行保存,并對應(yīng)保存該資源鍵,同時向訪問方返回該GDI資源對象的句柄,如果是,則找到該資源鍵對應(yīng)的該GDI資源對象的句柄,返回給訪問方。其中,GDI資源對象X的資源鍵可以是利用GDI資源對象X的種類信息和屬性信息按預(yù)定順序拼接出的一個字符串。舉例說明假設(shè)⑶I資源對象X的種類為畫筆,屬性包括風(fēng)格、大小和顏色,在實際應(yīng)用中,上述種類和屬性均會以某種代碼或符號進(jìn)行表示,那么,將這些代碼或符號按照預(yù)定順序拼接起來即可得到一個字符串,該字符串即為GDI資源對象X的資源鍵,所述預(yù)定順序可依次為種類、風(fēng)格、大小和顏色。步驟13 :訪問方利用資源池返回的句柄訪問該⑶I資源對象。如何創(chuàng)建GDI資源對象以及如何利用句柄來訪問GDI資源對象均為現(xiàn)有技術(shù)。另外,為了及時釋放內(nèi)存空間,可在創(chuàng)建并保存GDI資源對象之后,設(shè)置其引用計數(shù)為I ;后續(xù),當(dāng)針對該GDI資源對象每接收到一次創(chuàng)建請求時,則將其引用計數(shù)加I ;當(dāng)針對該GDI資源對象每接收到一次釋放請求(訪問完畢)時,則將其引用計數(shù)減I ;當(dāng)其引用計數(shù)為0時,將該GDI資源對象及其相關(guān)信息從資源池中移除。也就是說,針對資源池中保存的每個⑶I資源對象,分別跟蹤其正被引用(訪問)的次數(shù),每個GDI資源對象均可被多個訪問方共享,當(dāng)訪問方增加或減少時,相應(yīng)地增大或減小其對應(yīng)的引用計數(shù),當(dāng)沒有任何訪問方使用它時,則可移除。綜上,對于資源池來說,針對其中保存的每個GDI資源對象,對應(yīng)保存其句柄、資源鍵和引用計數(shù)。在實際應(yīng)用中,可使用映射(MAP)表來維護(hù)上述信息。下面通過較佳實施例對圖1所示方法進(jìn)行進(jìn)一步說明。圖2為本發(fā)明⑶I資源管理方法較佳實施例的流程圖。如圖2所示,包括以下步驟步驟21 :當(dāng)訪問方需要訪問一 GDI資源對象時,生成該GDI資源對象的資源鍵,攜帶在創(chuàng)建請求中發(fā)送給資源池。步驟22:資源池確定自身是否保存有接收到的資源鍵,如果是,則執(zhí)行步驟23,否貝U,執(zhí)行步驟24。步驟23 :資源池將接收到的資源鍵對應(yīng)的引用計數(shù)加1,并向訪問方返回接收到的資源鍵對應(yīng)的GDI資源對象的句柄,然后執(zhí)行步驟25。步驟24 :資源池根據(jù)接收到的資源鍵創(chuàng)建GDI資源對象及其句柄,并保存所創(chuàng)建的GDI資源對象及其句柄以及對應(yīng)的資源鍵,同時設(shè)置所創(chuàng)建的GDI資源對象的引用計數(shù)為I ;之后,向訪問方返回所創(chuàng)建的GDI資源對象的句柄,然后執(zhí)行步驟25。步驟25 :訪問方根據(jù)接收到的句柄訪問⑶I資源對象。步驟26 :訪問方需要釋放一⑶I資源對象,向資源池發(fā)送釋放請求,其中攜帶有該GDI資源對象的資源鍵。步驟27:資源池確定自身是否保存有接收到的資源鍵,如果是,則執(zhí)行步驟28,否貝U,結(jié)束流程。如果資源池未保存接收到的資源鍵,后續(xù)如何處理不作限制。步驟28 :資源池將接收到的資源鍵對應(yīng)的引用計數(shù)減I。步驟29 :資源池確定接收到的資源鍵對應(yīng)的引用計數(shù)是否為0,如果是,則執(zhí)行步驟210,否則,結(jié)束流程。步驟210 :資源池將接收到的資源鍵對應(yīng)的GDI資源對象及其相關(guān)信息從自身移除,結(jié)束流程。圖3為對應(yīng)圖2所示過程的一個具體示例示意圖。如圖3所示,假設(shè)某一時刻,資源池中共存在兩個⑶I資源對象,分別為紅色畫刷和黑色畫筆,對應(yīng)的引用計數(shù)分別為4和1,之后的某一時刻,資源池接收到了一個創(chuàng)建紅色畫刷的請求,那么則將紅色畫刷對應(yīng)的引用計數(shù)加1,變?yōu)? ;再之后的某一時刻,資源池又接收到了一個釋放黑色畫筆的請求,那么則將黑色畫筆對應(yīng)的引用計數(shù)減1,變?yōu)?,相應(yīng)地,移除黑色畫筆,這樣,資源池中就只剩下紅色畫刷?;谏鲜鼋榻B,圖4為本發(fā)明⑶I資源管理裝置實施例的組成結(jié)構(gòu)示意圖。如圖4所示,包括訪問模塊41和資源池42 ;訪問模塊41,用于當(dāng)需要訪問一⑶I資源對象時,向資源池42發(fā)送創(chuàng)建請求,并利用資源池42返回的句柄訪問該GDI資源對象;資源池42,用于在接收到該創(chuàng)建請求后,確定自身是否保存有該GDI資源對象,如果否,則創(chuàng)建該GDI資源對象及其句柄,進(jìn)行保存,并返回該GDI資源對象的句柄,如果是,則返回該GDI資源對象的句柄。
其中,倉Il建請求中可進(jìn)一步攜帶有訪問模塊41生成的該GDI資源對象的資源鍵;相應(yīng)地,資源池42確定自身是否保存有該資源鍵,如果否,則根據(jù)該資源鍵創(chuàng)建該GDI資源對象及其句柄,進(jìn)行保存,并對應(yīng)保存該資源鍵,同時向訪問模塊41返回該GDI資源對象的句柄,如果是,則找到該資源鍵對應(yīng)的該GDI資源對象的句柄,返回給訪問模塊41。上述資源池42可進(jìn)一步用于,當(dāng)創(chuàng)建并保存該⑶I資源對象之后,設(shè)置其引用計數(shù)為I ;后續(xù),當(dāng)針對該GDI資源對象每接收到一次創(chuàng)建請求時,則將其引用計數(shù)加1,當(dāng)針對該GDI資源對象每接收到一次釋放請求時,則將其引用計數(shù)減1,當(dāng)其引用計數(shù)為0時,將該GDI資源對象及其相關(guān)信息從自身移除。上述GDI資源對象的資源鍵可為利用GDI資源對象的種類信息和屬性信息按預(yù)定順序拼接出的一個字符串。圖4所示裝置實施例的具體工作流程請參照圖1 3所示方法實施例中的相同說明,此處不再贅述。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種圖形設(shè)備接口⑶I資源管理方法,其特征在于,包括當(dāng)訪問方需要訪問一⑶I資源對象時,向資源池發(fā)送創(chuàng)建請求;所述資源池確定自身是否保存有所述GDI資源對象,如果否,則創(chuàng)建所述GDI資源對象及其句柄,進(jìn)行保存,并返回所述GDI資源對象的句柄,如果是,則返回所述GDI資源對象的句柄;所述訪問方利用所述資源池返回的句柄訪問所述GDI資源對象。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述向資源池發(fā)送創(chuàng)建請求包括生成所述GDI資源對象的資源鍵,將生成的資源鍵攜帶在所述創(chuàng)建請求中發(fā)送給所述資源池;所述資源池確定自身是否保存有所述GDI資源對象,如果否,則創(chuàng)建所述GDI資源對象及其句柄,進(jìn)行保存,并返回所述GDI資源對象的句柄,如果是,則返回所述GDI資源對象的句柄包括所述資源池確定自身是否保存有所述資源鍵,如果否,則根據(jù)所述資源鍵創(chuàng)建所述GDI 資源對象及其句柄,進(jìn)行保存,并對應(yīng)保存所述資源鍵,同時向所述訪問方返回所述GDI資源對象的句柄,如果是,則找到所述資源鍵對應(yīng)的所述GDI資源對象的句柄,返回給所述訪問方。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,該方法進(jìn)一步包括當(dāng)創(chuàng)建并保存所述GDI資源對象之后,設(shè)置其引用計數(shù)為I ;后續(xù),當(dāng)針對所述GDI資源對象每接收到一次創(chuàng)建請求時,則將其引用計數(shù)加1,當(dāng)針對所述GDI資源對象每接收到一次釋放請求時,則將其引用計數(shù)減1,當(dāng)其引用計數(shù)為O時, 將所述GDI資源對象及其相關(guān)信息從所述資源池中移除。
4.根據(jù)權(quán)利要求2或3所述的方法,其特征在于,所述生成所述GDI資源對象的資源鍵包括利用所述GDI資源對象的種類信息和屬性信息按預(yù)定順序拼接出一個字符串,將所述字符串作為所述GDI資源對象的資源鍵。
5.一種圖形設(shè)備接口⑶I資源管理裝置,其特征在于,包括訪問模塊和資源池;所述訪問模塊,用于當(dāng)需要訪問一 GDI資源對象時,向所述資源池發(fā)送創(chuàng)建請求,并利用所述資源池返回的句柄訪問所述GDI資源對象;所述資源池,用于在接收到所述創(chuàng)建請求后,確定自身是否保存有所述GDI資源對象, 如果否,則創(chuàng)建所述GDI資源對象及其句柄,進(jìn)行保存,并返回所述GDI資源對象的句柄,如果是,則返回所述GDI資源對象的句柄。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述創(chuàng)建請求中進(jìn)一步攜帶有所述訪問模塊生成的所述GDI資源對象的資源鍵;所述資源池確定自身是否保存有所述資源鍵,如果否,則根據(jù)所述資源鍵創(chuàng)建所述GDI 資源對象及其句柄,進(jìn)行保存,并對應(yīng)保存所述資源鍵,同時向所述訪問模塊返回所述GDI 資源對象的句柄,如果是,則找到所述資源鍵對應(yīng)的所述GDI資源對象的句柄,返回給所述訪問模塊。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述資源池進(jìn)一步用于,當(dāng)創(chuàng)建并保存所述GDI資源對象之后,設(shè)置其引用計數(shù)為I ;后續(xù),當(dāng)針對所述GDI資源對象每接收到一次創(chuàng)建請求時,則將其引用計數(shù)加1,當(dāng)針對所述GDI資源對象每接收到一次釋放請求時,則將其引用計數(shù)減1,當(dāng)其引用計數(shù)為O時,將所述GDI資源對象及其相關(guān)信息從自身移除。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述GDI資源對象的資源鍵為利用所述GDI資源對象的種類信息和屬性信息按預(yù)定順序拼接出的一個字符串。
全文摘要
本發(fā)明公開了一種圖形設(shè)備接口(GDI)資源管理方法當(dāng)訪問方需要訪問一GDI資源對象時,向資源池發(fā)送創(chuàng)建請求;所述資源池確定自身是否保存有所述GDI資源對象,如果否,則創(chuàng)建所述GDI資源對象及其句柄,進(jìn)行保存,并返回所述GDI資源對象的句柄,如果是,則返回所述GDI資源對象的句柄;所述訪問方利用所述資源池返回的句柄訪問所述GDI資源對象。應(yīng)用本發(fā)明所述的方法和裝置,能夠提高GDI資源的利用率,降低系統(tǒng)開銷,并減少系統(tǒng)內(nèi)存的占用等。
文檔編號G06F17/30GK102999518SQ20111027328
公開日2013年3月27日 申請日期2011年9月15日 優(yōu)先權(quán)日2011年9月15日
發(fā)明者高峰, 潘昱存, 唐宗堯, 楊寶龍 申請人:騰訊科技(深圳)有限公司