`
yanlijun250
  • 浏览: 752521 次
文章分类
社区版块
存档分类
最新评论

资源系统的管理(估计全世界也只有我不知道了)

 
阅读更多

GEM4上已经有了,很不错的一套实现。

基于Java垃圾管理机制的程序,基本不需要考虑资源的删除问题,但是C++程序员经常恼火的就是资源的问题。

普通的资源系统的做法,如果像OGRE那样,很多人已经觉得很酷了,但是我总觉得OGRE的资源系统反倒是写的最糟糕的一套系统。到1.0发布版本的前一个版本为止,资源系统仍然有些逻辑没有写完,包括多资源动态调入调出,可能OGRE社群还没遇到像WOW这样动辄数个GB的资源的应用。

在动态调入调出前,需要解决的一个问题,就是明确哪些资源可以调出,再说明白些,就是哪些资源目前没有被使用?

这个问题,COM可以解答,就是“标准的”AddRef、Release机制,但这个机制有一个臭名昭著的问题,就是迫使每个人在进行指针赋值的时候都必须自己自觉地加一个AddRef,指针销毁的时候,都用Release销毁。

例如:
RESOURCE * pRes = GetResMgr()->GetRes("sth");
这是绝对没问题的,sth会被Addref。
但是,您防不住:
RESOURCE * pRes2 = pRes;
而这时候,如果pRes2没有被手动AddRef,哼哼哼哼……

难道COM的开发者以为共产主义社会已经来临了?自觉?搞笑吧,只要有一个人不自觉,他就会很郁闷。他的郁闷会进而转化为使用他写的程序的人的郁闷。再进而转化为这个人所在公司的郁闷:人们会向这个公司的油箱里塞入成千上万谩骂、威胁的信笺……或许还有通知“法庭上见”的律师函。

如果您开发的是一个引擎,千万不要认为使用引擎的人都是牛人,都是自觉的人。就像当您开发一个游戏的时候,千万不要以为游戏的使用者都是中规中矩的玩家,他们有时候经常会做一些在您眼里奇怪的事情,如果这时候,游戏挂了,您觉得这个错误该让谁来买单呢?让玩家吗?

可以,但是您将因此失去一个玩家,或者,如果这个人是某个BBS的牛人,您将因此失去整个某BBS的人,然后一传十十传百……

请一定要记住一句话:“舆论的最大优势是在于它杀死一个人是如此的高效,而却不必为此承担任何法律责任”。谁说的?……我。

言归正转,看看我们要做的事情:我们肯定不能避免指针对指针的赋值,这是前提;我们不想让人们在这种时候都去记住调一个AddRef,怎么办呢?

学习一下Windows吧,高明的Windows在管理内核对象的时候,用的是什么?恩,对了,Handle。

在C++中,Handle是一个void*指针,无论是HWND、HINSTANCE还是别的,都是一个typedef void* HXX,但是我想我们没必要这么笨的。

我们的Handle可能类似于下面的样子:

class Handle
{
...
public:
RESOURCE* ptr;
...
};

没甚么啊,您会说,就是一层包装而以。

对,但是包装后我们就可以做很多事情了哦~,比如说在包装上打上商店的商标,呵呵,人们就可以免费为我们做广告了。

我们可以重载拷贝构造子和赋值号,而在构造子、拷贝构造子中、赋值号中,我们可以:
ptr->AddRef()

同理,Handle销毁的时候:
ptr->Release()

这回就算有人能把自己的老婆都忘掉,他也绝对忘不掉去调用AddRef了,虽然他自己都不知道这个AddRef是在哪里调用的。

但您必须保证,在资源系统,以及任何用到这些资源的地方,都只使用Handle,不过我想这应该很容易。

如果还不明白,就去看《游戏编程精粹4》吧,80快钱,不过您不用买,只需要去看中间那个章节就可以了,好像是什么什么“弱引用”什么什么来着。

分享到:
评论

相关推荐

    人力资源管理系统测试计划

    3.5 关键计算机资源估计 8 3.6 成本估计(可选) 9 4 风险管理计划 9 5 组间协调计划 9 6 测试度量采集与分析计划 9 6.1 采集计划 9 6.2 度量分析计划 9 7 资源 10 7.1 人员安排 10 7.2 系统资源 10 8 项目测试里程...

    ssh做的人力资源管理系统

    用当今主流的框架ssh做的人力资源管理系统,本系统包括:系统管理、人力资源档案管理、薪酬管理、调动管理、培训管理、激励管理、招聘管理、权限管理和录用管理、标准化数据报表十个模块。(用于太大,我吧lib下的包...

    Java人力资源管理系统

    Java人力资源管理系统 Java 人力资源 管理系统Java人力资源管理系统 Java 人力资源 管理系统Java人力资源管理系统 Java 人力资源 管理系统

    c#人力资源管理系统c#人力资源管理系统

    c# 人力资源管理系统 编程 开发 webc# 人力资源管理系统 编程 开发 webc# 人力资源管理系统 编程 开发 webc# 人力资源管理系统 编程 开发 webc# 人力资源管理系统 编程 开发 webc# 人力资源管理系统 编程 开发 webc#...

    人力资源管理系统用例图

    人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图人力资源管理系统用例图...

    人力资源管理系统设计全套文档

    人力资源管理系统设计全套文档包括:操作手册、测试计划、概要设计说明书、可行性分析报告、统需求说明书、详细设计说明书、项目计划、项目总结报告、用户手册

    JSP企业人力资源管理系统

    开发以计算机技术、网络技术、信息技术支持的现代人力资源管理系统,既能提高企业人力资源管理的技术含量和企业的办事效率,也能使人力资源管理能够进入现代化、决策科学化的进程。现代人力资源管理系统采用了B/S...

    JSP人力资源管理系统设计和实现

    人力资源管理系统主要功能包括员工基本档案、员工考勤情况、绩效考核管理、员工奖惩情况、工资、培训、招聘几大子模块。而我完成的是员工考勤管理、绩效考核管理、员工奖惩管理三个部分。我认为在一个较为完善的公司...

    人力资源管理系统

    人力资源管理系统.,解到一个总目录 系统采用C/S,B/S结构,具有全面的人事信息管理、工资管理、 社会保险和公积金管理、退休/退养/下岗/辞职、 人员管理等人事劳资管理功能、强大的查询统计能力、 自动生成...

    毕业设计 springBoot人力资源管理系统+毕业论文+前后端源代码

    描述人力资源管理系统 毕业设计 人力资源管理系统是一个非常常见的毕业设计题目,包含以下几个模块: 用户管理模块:包括用户的登录、注册、修改密码等功能。 员工管理模块:包括员工的基本信息、薪资、考勤、请假...

    开源人力资源管理系统

    GAEA开源人力资源管理系统 ※基于J2EE技术的B/S结构,实现局域网/互联网访问,促进企业全国范围内人力资源业务的整合; ※信息集中化管理,通过权限共享eHR信息,不受地域限制; ※客户端的免安装和零维护,极大的...

    人力资源管理系统ER图

    人力资源管理系统ER图,简单,明了,实体包括员工信息,岗位信息,合同,考核,培训以及证书信息

    LinBSoft教学资源库管理系统视窗界面

    这是一个新设计的教学资源库系统 界面 采用Extjs4 desktop 技术 教学资源库系统主要功能: 教学资源的管理,提供上载、分类检索、下载 ,按学科分类,按资源类型分类等功能,有全面的分级权限控制,多种检索方法,...

    人力资源管理系统论文

    本文所阐述的人力资源管理系统,以浏览器/服务器模式高效地实现了人力资源管理系统的各项功能,可进行多条件查询、更新、密码设置、工资和奖金的统计发放等功能.提升了企业的效率和竞争力,满足了现代企业管理的需要. ...

    人力资源管理系统毕业设计

    人力资源管理系统毕业设计

    C#人力资源管理系统(高压缩)

    在新形势下,人力资源管理系统是一个企业单位不可缺少的部分,是适应现代企业制度,推动企业人力资源管理走向科学化、规范化、自动化的必要条件;是应对挑战、适应环境变化、提高企业管理效率、提升核心竞争力的关键...

    人力资源管理系统(ASP+SQL Server2005)

    人力资源管理系统ASP+SQL Server2005实现,有文档 使用说明 系统介绍 随着企业内人力资源管理的网络化和系统化的日益完善,人力资源管理系统在企业管理中越来越受企业管理者的青睐。人力资源管理系统的功能全面、...

    hr人力资源管理系统(开源)

    hr人力资源管理系统,很好用,有源码,简单易懂

    EasyHR易安人力资源管理系统(完全开源)

    100%开源连锁企业(超市、物流、商店、不同地点有分公司的企业工厂)... 可以提取企业考勤系统数据,而且也可以与企业生产系统、供应链、ERP方便的二次开发进行对接,也可以在此基础上开发OA、CRM、文档管理等系统。

    人力资源管理系统人力资源管理系统

    非常不错的人力资源管理系统人力资源管理系统人力资源管理系统人力资源管理系统

Global site tag (gtag.js) - Google Analytics