一种图形设备接口资源管理方法和装置转让专利

申请号 : CN201110273287.1

文献号 : CN102999518B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高峰潘昱存唐宗尧杨宝龙

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本发明公开了一种图形设备接口(GDI)资源管理方法:当访问方需要访问一GDI资源对象时,向资源池发送创建请求;所述资源池确定自身是否保存有所述GDI资源对象,如果否,则创建所述GDI资源对象及其句柄,进行保存,并返回所述GDI资源对象的句柄,如果是,则返回所述GDI资源对象的句柄;所述访问方利用所述资源池返回的句柄访问所述GDI资源对象。应用本发明所述的方法和装置,能够提高GDI资源的利用率,降低系统开销,并减少系统内存的占用等。

权利要求 :

1.一种图形设备接口GDI资源管理方法,其特征在于,包括:

当访问方需要访问一GDI资源对象时,向资源池发送创建请求,其中所述访问方是一个系统进程;

所述资源池确定自身是否保存有所述GDI资源对象,如果否,则创建所述GDI资源对象及其句柄,进行保存,并返回所述GDI资源对象的句柄,如果是,则返回所述GDI资源对象的句柄;

所述访问方利用所述资源池返回的句柄访问所述GDI资源对象,

其中,所述向资源池发送创建请求包括:生成所述GDI资源对象的资源键,将生成的资源键携带在所述创建请求中发送给所述资源池;

所述资源池确定自身是否保存有所述GDI资源对象,如果否,则创建所述GDI资源对象及其句柄,进行保存,并返回所述GDI资源对象的句柄,如果是,则返回所述GDI资源对象的句柄包括:所述资源池确定自身是否保存有所述资源键,如果否,则根据所述资源键创建所述GDI资源对象及其句柄,进行保存,并对应保存所述资源键,同时向所述访问方返回所述GDI资源对象的句柄,如果是,则找到所述资源键对应的所述GDI资源对象的句柄,返回给所述访问方。

2.根据权利要求1所述的方法,其特征在于,该方法进一步包括:

当创建并保存所述GDI资源对象之后,设置其引用计数为1;

后续,当针对所述GDI资源对象每接收到一次创建请求时,则将其引用计数加1,当针对所述GDI资源对象每接收到一次释放请求时,则将其引用计数减1,当其引用计数为0时,将所述GDI资源对象及其相关信息从所述资源池中移除。

3.根据权利要求1或2所述的方法,其特征在于,所述生成所述GDI资源对象的资源键包括:利用所述GDI资源对象的种类信息和属性信息按预定顺序拼接出一个字符串,将所述字符串作为所述GDI资源对象的资源键。

4.一种图形设备接口GDI资源管理装置,其特征在于,包括:访问模块和资源池;

所述访问模块,用于当访问方需要访问一GDI资源对象时,向所述资源池发送创建请求,并利用所述资源池返回的句柄访问所述GDI资源对象,其中所述访问方是一个系统进程;

所述资源池,用于在接收到所述创建请求后,确定自身是否保存有所述GDI资源对象,如果否,则创建所述GDI资源对象及其句柄,进行保存,并返回所述GDI资源对象的句柄,如果是,则返回所述GDI资源对象的句柄,其中,所述创建请求中进一步携带有所述访问模块生成的所述GDI资源对象的资源键;

所述资源池确定自身是否保存有所述资源键,如果否,则根据所述资源键创建所述GDI资源对象及其句柄,进行保存,并对应保存所述资源键,同时向所述访问模块返回所述GDI资源对象的句柄,如果是,则找到所述资源键对应的所述GDI资源对象的句柄,返回给所述访问模块。

5.根据权利要求4所述的装置,其特征在于,所述资源池进一步用于,当创建并保存所述GDI资源对象之后,设置其引用计数为1;后续,当针对所述GDI资源对象每接收到一次创建请求时,则将其引用计数加1,当针对所述GDI资源对象每接收到一次释放请求时,则将其引用计数减1,当其引用计数为0时,将所述GDI资源对象及其相关信息从自身移除。

6.根据权利要求4或5所述的装置,其特征在于,所述GDI资源对象的资源键为利用所述GDI资源对象的种类信息和属性信息按预定顺序拼接出的一个字符串。

说明书 :

一种图形设备接口资源管理方法和装置

技术领域

[0001] 本发明涉及资源管理技术,特别涉及一种图形设备接口(GDI,Graphic Device Interface)资源管理方法和装置。

背景技术

[0002] GDI资源是由系统内核程序“Gdiexe”管理的资源,用于保存画刷、画笔、字体、调色板等图形对象信息。可以认为,GDI资源是由一系列的GDI资源对象组成。
[0003] 现有技术中,当一系统进程需要访问一GDI资源对象时,会调用::CreateFont、::CreateSolidBrush或::CreatePen等全局函数,由这些全局函数来创建GDI资源对象,并返回GDI句柄,后续可利用GDI句柄来对GDI资源对象进行访问;之后的某一时刻,如果要访问另一GDI资源对象,重复上述过程。
[0004] 但是,上述方式在实际应用中会存在一定的问题,如:如果前后两次要访问的GDI资源对象相同,所述相同是指种类和属性均相同,其中,种类是指画刷、画笔、字体等,属性是指画刷的颜色,画笔的风格、大小、颜色,字体的种类、大小、粗细、斜体属性以及是否有下划线等;那么按照现有方式,即使之前已经创建了相同的GDI资源对象,下一次仍会重新创建,即相同的GDI资源对象被重复创建,从而导致GDI资源利用率降低、系统开销增大以及系统内存占用增大等问题。

发明内容

[0005] 有鉴于此,本发明提供一种GDI资源管理方法和装置,能够提高GDI资源的利用率,降低系统开销,并减少系统内存的占用。
[0006] 为达到上述目的,本发明的技术方案是这样实现的:
[0007] 一种GDI资源管理方法,包括:
[0008] 当访问方需要访问一GDI资源对象时,向资源池发送创建请求;
[0009] 所述资源池确定自身是否保存有所述GDI资源对象,如果否,则创建所述GDI资源对象及其句柄,进行保存,并返回所述GDI资源对象的句柄,如果是,则返回所述GDI资源对象的句柄;
[0010] 所述访问方利用所述资源池返回的句柄访问所述GDI资源对象。
[0011] 一种GDI资源管理装置,包括:访问模块和资源池;
[0012] 所述访问模块,用于当需要访问一GDI资源对象时,向所述资源池发送创建请求,并利用所述资源池返回的句柄访问所述GDI资源对象;
[0013] 所述资源池,用于在接收到所述创建请求后,确定自身是否保存有所述GDI资源对象,如果否,则创建所述GDI资源对象及其句柄,进行保存,并返回所述GDI资源对象的句柄,如果是,则返回所述GDI资源对象的句柄。
[0014] 可见,采用本发明所述方案,如果要访问的GDI资源对象已经保存在了资源池中,即之前已经创建过了,则不再重新创建,从而尽可能地避免了出现相同的GDI资源对象被重复创建的问题,进而提高了GDI资源的利用率,降低了系统开销,并减少了系统内存的占用等;另外,本发明所述方案实现起来简单方便,便于普及和推广。

附图说明

[0015] 图1为本发明GDI资源管理方法实施例的流程图。
[0016] 图2为本发明GDI资源管理方法较佳实施例的流程图。
[0017] 图3为对应图2所示过程的一个具体示例示意图。
[0018] 图4为本发明GDI资源管理装置实施例的组成结构示意图。

具体实施方式

[0019] 针对现有技术中存在的问题,本发明中提出一种GDI资源管理方案,能够提高GDI资源的利用率,降低系统开销,并减少系统内存的占用等。
[0020] 图1为本发明GDI资源管理方法实施例的流程图。如图1所示,包括以下步骤:
[0021] 步骤11:当访问方需要访问一GDI资源对象时,向资源池发送创建请求。
[0022] 所述访问方可以是指一系统进程等。资源池是指资源的集合,可有效地保存和管理资源。
[0023] 步骤12:资源池确定自身是否保存有该GDI资源对象,如果否,则创建该GDI资源对象及其句柄,进行保存,并返回该GDI资源对象的句柄,如果是,则返回该GDI资源对象的句柄。
[0024] 步骤11~12中,当访问方需要访问一GDI资源对象,假设为GDI资源对象X时,可首先生成GDI资源对象X的资源键,之后,将生成的资源键携带在创建请求中发送给资源池;资源池确定自身是否保存有接收到的资源键,如果否,则根据接收到的资源键创建该GDI资源对象及其句柄,进行保存,并对应保存该资源键,同时向访问方返回该GDI资源对象的句柄,如果是,则找到该资源键对应的该GDI资源对象的句柄,返回给访问方。
[0025] 其中,GDI资源对象X的资源键可以是利用GDI资源对象X的种类信息和属性信息按预定顺序拼接出的一个字符串。
[0026] 举例说明:
[0027] 假设GDI资源对象X的种类为画笔,属性包括风格、大小和颜色,在实际应用中,上述种类和属性均会以某种代码或符号进行表示,那么,将这些代码或符号按照预定顺序拼接起来即可得到一个字符串,该字符串即为GDI资源对象X的资源键,所述预定顺序可依次为:种类、风格、大小和颜色。
[0028] 步骤13:访问方利用资源池返回的句柄访问该GDI资源对象。
[0029] 如何创建GDI资源对象以及如何利用句柄来访问GDI资源对象均为现有技术。
[0030] 另外,为了及时释放内存空间,可在创建并保存GDI资源对象之后,设置其引用计数为1;后续,当针对该GDI资源对象每接收到一次创建请求时,则将其引用计数加1;当针对该GDI资源对象每接收到一次释放请求(访问完毕)时,则将其引用计数减1;当其引用计数为0时,将该GDI资源对象及其相关信息从资源池中移除。
[0031] 也就是说,针对资源池中保存的每个GDI资源对象,分别跟踪其正被引用(访问)的次数,每个GDI资源对象均可被多个访问方共享,当访问方增加或减少时,相应地增大或减小其对应的引用计数,当没有任何访问方使用它时,则可移除。
[0032] 综上,对于资源池来说,针对其中保存的每个GDI资源对象,对应保存其句柄、资源键和引用计数。在实际应用中,可使用映射(MAP)表来维护上述信息。
[0033] 下面通过较佳实施例对图1所示方法进行进一步说明。
[0034] 图2为本发明GDI资源管理方法较佳实施例的流程图。如图2所示,包括以下步骤:
[0035] 步骤21:当访问方需要访问一GDI资源对象时,生成该GDI资源对象的资源键,携带在创建请求中发送给资源池。
[0036] 步骤22:资源池确定自身是否保存有接收到的资源键,如果是,则执行步骤23,否则,执行步骤24。
[0037] 步骤23:资源池将接收到的资源键对应的引用计数加1,并向访问方返回接收到的资源键对应的GDI资源对象的句柄,然后执行步骤25。
[0038] 步骤24:资源池根据接收到的资源键创建GDI资源对象及其句柄,并保存所创建的GDI资源对象及其句柄以及对应的资源键,同时设置所创建的GDI资源对象的引用计数为1;之后,向访问方返回所创建的GDI资源对象的句柄,然后执行步骤25。
[0039] 步骤25:访问方根据接收到的句柄访问GDI资源对象。
[0040] 步骤26:访问方需要释放一GDI资源对象,向资源池发送释放请求,其中携带有该GDI资源对象的资源键。
[0041] 步骤27:资源池确定自身是否保存有接收到的资源键,如果是,则执行步骤28,否则,结束流程。
[0042] 如果资源池未保存接收到的资源键,后续如何处理不作限制。
[0043] 步骤28:资源池将接收到的资源键对应的引用计数减1。
[0044] 步骤29:资源池确定接收到的资源键对应的引用计数是否为0,如果是,则执行步骤210,否则,结束流程。
[0045] 步骤210:资源池将接收到的资源键对应的GDI资源对象及其相关信息从自身移除,结束流程。
[0046] 图3为对应图2所示过程的一个具体示例示意图。如图3所示,假设某一时刻,资源池中共存在两个GDI资源对象,分别为红色画刷和黑色画笔,对应的引用计数分别为4和1,之后的某一时刻,资源池接收到了一个创建红色画刷的请求,那么则将红色画刷对应的引用计数加1,变为5;再之后的某一时刻,资源池又接收到了一个释放黑色画笔的请求,那么则将黑色画笔对应的引用计数减1,变为0,相应地,移除黑色画笔,这样,资源池中就只剩下红色画刷。
[0047] 基于上述介绍,图4为本发明GDI资源管理装置实施例的组成结构示意图。如图4所示,包括:访问模块41和资源池42;
[0048] 访问模块41,用于当需要访问一GDI资源对象时,向资源池42发送创建请求,并利用资源池42返回的句柄访问该GDI资源对象;
[0049] 资源池42,用于在接收到该创建请求后,确定自身是否保存有该GDI资源对象,如果否,则创建该GDI资源对象及其句柄,进行保存,并返回该GDI资源对象的句柄,如果是,则返回该GDI资源对象的句柄。
[0050] 其中,创建请求中可进一步携带有访问模块41生成的该GDI资源对象的资源键;相应地,资源池42确定自身是否保存有该资源键,如果否,则根据该资源键创建该GDI资源对象及其句柄,进行保存,并对应保存该资源键,同时向访问模块41返回该GDI资源对象的句柄,如果是,则找到该资源键对应的该GDI资源对象的句柄,返回给访问模块41。
[0051] 上述资源池42可进一步用于,当创建并保存该GDI资源对象之后,设置其引用计数为1;后续,当针对该GDI资源对象每接收到一次创建请求时,则将其引用计数加1,当针对该GDI资源对象每接收到一次释放请求时,则将其引用计数减1,当其引用计数为0时,将该GDI资源对象及其相关信息从自身移除。
[0052] 上述GDI资源对象的资源键可为利用GDI资源对象的种类信息和属性信息按预定顺序拼接出的一个字符串。
[0053] 图4所示装置实施例的具体工作流程请参照图1~3所示方法实施例中的相同说明,此处不再赘述。
[0054] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。