2010年7月14日

摘要: 不满以目前域名,所以换到:cnblogs.com/jisujun 阅读全文
posted @ 2010-07-14 01:05 kevinjee 阅读(112) 评论(0) 推荐(0)

2010年5月30日

摘要: (本站文章均出自原创,转载请注明出处~)1.连续内存序列容器(vector,string,deque)序列容器的erase方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。vector<int> c;for(vector<int>::iterator it = c.begin(); it != c.end();){if(need_de... 阅读全文
posted @ 2010-05-30 14:02 kevinjee 阅读(1165) 评论(0) 推荐(1)

2010年5月19日

摘要: 最近在阅读Gamebryo的文档,先读的Object System这部分。Gamebryo中从NiRefObject继承下来的类都支持引用计数,也就是说支持0引用下对象自动销毁。 一直以来都听闻智能指针的大名,平常项目中并没有使用过,所以也一直没抽空去研究,今天花了点时间自己实现了一个智能指针。 要实现一个智能指针就要先实现一个支持引用计数的类,主要负责增加计数,减少计数,销毁持有的对象指针。大致实现如下: template class RefObject { public: explicit RefObject(T* p):m_RefCount(1),m_pContainer(p) { } ~RefObject() { decRef(); } 阅读全文
posted @ 2010-05-19 21:49 kevinjee 阅读(1899) 评论(1) 推荐(2)

2010年3月31日

摘要: 很多年前就开始用MFC了,但一直没研究过内部的原理,仅仅是能熟练使用VC++/AppWizard写软件而已。 作为一个游戏程序员,Win32的技术还是要做基本功的,于是阅读了一些MFC的源代码,搞清楚了MFC消息路由/映射机制。 以下分三个步骤就可以描述清楚: 1. MFC中的每个窗口都对应一个C++类 Windows中的窗口用HWND来标示,C++类是指CWnd或其派生类。两者之间可以互相转换,方法如下: CWnd* wnd = CWnd::FromHandlePermanent(hWnd); //==> HWND hWnd = wnd->GetSafeHwnd(); 2. MFC中所有的窗口都共用一个窗口过程函数AfxWndProc 我们知道窗口过程函数的第一个参数就是hWnd,因此可以根据这个参数找到CWnd类的实例,然后调用CWnd的 WindowProc函数。这样就完成了窗口消息到窗口类实例的路由。 阅读全文
posted @ 2010-03-31 00:21 kevinjee 阅读(908) 评论(0) 推荐(0)

2010年3月28日

摘要: 确保你的程序只有一个进程实例在运行有很多种方法,利用共享数据段的方法最简单方便。 一个EXE文件是有不同的段(Section)组成的,其中有若干代码段和若干数据段。在默认情况下, 操作系统为了确保每个进程实例在安全环境中运行会为每个进程实例创建自己的数据段的拷贝, 这样多个进程实例就不会因为一个实例修改了数据段的内容而影响到另外的进程实例。但是我们 也可以为EXE创建共享数据段,这样多个进程实例就可以共享这个数据段而不会拥有自己的拷贝。 因此我们可以在共享数据段里存放一个变量来表示目前进程实例的数量,从而实例我们的目标。 阅读全文
posted @ 2010-03-28 20:40 kevinjee 阅读(1813) 评论(3) 推荐(0)

2009年4月7日

摘要: (本站文章均出自原创,转载请注明出处~)有时候程序中有多个System对象,比如3D引擎中有RenderSystem, InputSystem, ResoureSystem。 所有这些对象都比较庞大,负责的工作也非常多,并且我们希望这些System在程序中只存在一个实例。为此我们很容易想到用单例模式来实现它。但有时候我们希望程序中存在一个入口,访问程序中的System都必须通过该入口来访问。这里有... 阅读全文
posted @ 2009-04-07 19:48 kevinjee 阅读(2153) 评论(7) 推荐(0)

导航