自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++0x:如何获取lambda表达式的返回类型

最近看了老赵的博文,意识到lambda不仅仅提供了一个仿函数的语法糖,而在于能封装环境变量,从而更轻松的实现异步函数调用.之前利用模板实现过异步函数调用,因为VS2008以前的C++不支持variadic templates和lambda,所以,其实现是用宏实现的0至N个参数的仿函数.因此,本次修改主要是保留以前的代码的基础上,增加lambda的支持.但在获取lambda的返回值的地方费了会儿

2012-03-26 14:59:41 2322

原创 C++/CLI的性能陷阱

纯C++代码在大多数情况下并不适合直接加入到C++/CLI项目里.相同的纯C++代码,在C++/CLI项目中,效率要比原生代码低得多。各种inline,SSE指令,自动SIMD指令都会失效。如果这个时候,自作聪明的在纯C++代码上关闭托管代码的编译,恭喜你,你中招了----通常情况下,效率变得更低,低了好多倍。原因在于,这样会在各个C++代码调用之间加入大量CLRStubOrUnknownAddr

2012-01-03 14:31:39 2054

原创 C#与C++/CLI的交互的一个细节

C#里面的out修饰,对应C++/CLI的[OutAttribute] T %初始代码(C++/CLI):void XXX(IntPtr % handle);(C#):IntPtr handle;XXX(out handle);一开始,因为没有[OutAttribute],导致C#调用C++/CLI的函数的时候,总是提示错

2011-11-17 11:02:52 1858

原创 viscose脚本语言的对外宣布

其实,viscose脚本语言存在已经有四个年头了,但一直仅限于在自己参与的项目里使用,也就身边的人知道和熟悉其语法.今天看见某个人的博客上罗列了一堆国人自己写的语言和平台,而他们的特性都不是viscose想要追求的.特立此文以公布之.viscose其实跟IronPython等基于.Net的脚本有一样的想法:利用.Net程序的反射机制,自动将.Net的功能导入到脚本中使用,从而避免书写繁琐的C/

2011-10-24 10:34:05 920

原创 利用模板实例化解决LNK2022错误.

诸如这样的问题http://social.msdn.microsoft.com/Forums/ar-SA/vcgeneral/thread/a4490504-956f-44d0-a39c-3a4bd36a4aacI have the following lines of code in my header file of a C++ CLR application:

2011-10-20 11:45:23 2413

原创 VS2010的项目依赖问题

通常,项目依赖是为了解决编译顺序问题,以便于底层代码更改后,上层代码可以自动被编译,从而减少代码不一致导致的错误.VS2010的项目依赖,在.Net的模块中,自动跟"框架和引用"画上了等号.因此,我设置了项目依赖,底层的DLL就自动被添加到了项目引用中,从项目引用中删除了对应

2011-08-16 16:25:32 2350

原创 C++/CLI的静态构造函数

不要绝对相信这个东西,不见得一定会调用静态构造函数.单独测试的时候,几乎都没有问题,一旦项目大了后,就不知道什么时候,某个类的静态构造函数就不调用了.这个时候,如果不是非常必要,宁愿用C++的方法去替换静态构造函数..Net总体上,BUG还是挺多的,用的时候要小心

2011-08-12 14:24:09 840

原创 WM_MOUSEWHEEL在多屏下的BUG

<br />操作系统:Windows7<br /> <br />MSDN是这样描述WM_MOUSEWHEEL的lParam参数的.<br />lParamThe low-order word specifies the x-coordinate of the pointer, relative to the upper-left corner of the screen.<br /> The high-order word specifies the y-coordinate of the poin

2011-04-07 14:31:00 1083

原创 利用C++的模板模拟.net的代理语法

用了一段时间.net的代理模式,觉得挺好使.且原来C++代码中存在大量需要代理的东西,由于没有近似的东西,都是靠接口实现的,看起来很别扭.遂想我是不是也能做这么一个东西.boost的function不是很熟悉,但基本实现还是明白的.直接用boost::function的话,有点杀鸡用牛刀的感觉,因为我仅仅只要一个很小很小的代理语法而已.况且,这么多年过去了,写C++代码越来越没有激情,正好有这么个契机,给自己来电激情.废话不多说,看代码(别看注释,没有注释,看不懂就去看boost::function去)vf

2011-01-11 10:10:00 1525

原创 VS2010是一个仓促推出的产品

<br />终于在C++0x的诱惑下,将正在参与的项目转到VS2010下了.真正使用了以后,才发现问题很多,从一些细节来看,vs2010是一个仓促推出的产品.<br />今天,还是决定转回到vs2008下开发,因为vs2010给我当头一棒:<br /> <br />https://connect.microsoft.com/VisualStudio/feedback/details/596685/-vs2010-sse2-bug<br /> 

2010-09-10 12:00:00 995

原创 给VS2010泼瓢冷水

这段时间,VS2010被炒得很火,她确实也有被炒火的资格,闹得我也从Beta2开始,一路跟随下来.好的地方CSDN上一片一片的,就是没有人说不好的,因此,我说点我发现的问题一:编译错误报告机制还有小缺陷,会错误报告代码出错位置,且错误位置是跨文件的,很难找.发现的原因是Beta2的时候,hash_map位于std名字空间下,而正式版是位于stdext名字空间下的,但又在std名字空间下us

2010-04-24 12:44:00 1179 2

原创 C++/CLI中,托管代码与本机代码销毁顺序

在托管代码的DLL中,即使是C++代码,也跟这个DLL有莫大的关系。如果时机掌握不得当,就会在程序退出的时候出现0xC0020001错误。即本机代码引用了一个托管代码的相关内容,而这个时候托管代码已经卸载了。这个时候,需要将这部分代码完全交由本机代码的DLL来实现。完全的意思是,默认构造函数/析构函数/拷贝赋值等等函数,只要托管代码里可能会调用到的,都需要在本机代码的DLL里实现,并导出。这样

2009-12-22 15:05:00 986

原创 双面与VFACE

今发现,在XP下,CullMode=None的情况下,VFace几乎是混乱的;而在Windows7下,是正确的。

2009-09-07 18:10:00 955 1

原创 通过简单快速的设置编译x64位汇编

最近在写64位汇编,设置编译命令是件繁琐而又重复的劳动。网上也有不少文章介绍怎么样编译64位汇编的,但都觉得复杂,有的还需要下载其他的汇编软件,最囧的是:有篇文章给出的下载地址下载下来的文件干脆就直接是木马!既然我们使用VS系列,就不要舍近求远了。使用MS提供的ml64,安全放心,也无兼容性问题。下面开始说明怎么样设置:一、在vc的安装目录下,找到“VCProjectDefaults/ma

2008-09-18 15:07:00 3579 1

原创 庆祝64位程序全速跑起来

其实很早就能正常跑起来了,但是呢,很多用了内嵌汇编的地方编译通不过,就用C++代码来完成对应的功能,相对而言,效率下降不少.故一直在心里没有把它当作完成了看待.这些天钻研了下64位的汇编相关的东西,将大部分重要的汇编代码提取出来,单独写成ASM文件,使用ml64编译成OBJ文件,终于完成了绝大部分重要代码的汇编化.故立此文以为纪念!

2008-09-17 22:54:00 1026

原创 缓存与效率

        在CPU多核的今天,考虑如何利用多核的问题已经摆在了每个程序员的面前。对一个稍微有点经验的程序员而言,OMP无疑是最快的捷径,并且收效非常高,基本能提升1.8倍的效率(双核CPU)。        耐着性子把OMP的介绍文章看完了,在3D应用中实践起来,收效很明显,骨骼计算,皮肤计算,顶点坐标/纹理坐标/法线插值上用得得心应手,一时兴起,把关键部分的计算用SSE指令重新写过后,

2008-09-11 11:15:00 1449

原创 完成端口的BUG?

s = createsocket();    //假定s返回值是10CreateIoCompletionPort(s, m_hCompletionPort, (DWORD_PTR)&A, 0);WSASend(s,...);WSASend(s,...);WSASend(s,...);WSASend(s,...);WSASend(s,...);这个时候,完成端口里累计了多

2008-09-01 09:39:00 1942 8

原创 VC的类型推导问题

由于代码要兼容64位系统,所以,跟指针有关联的整数全部都是适用的INT_PTR和UINT_PTR类型。这两个东西在32位系统下被定义成:__w64 int和__w64 unsigned int. 但是,VC的模板参数推导机制里,似乎是没有__w64这样的修饰的,因此,所有的__w64 int被推导成类型int,实例化出int类型的模板。在参数传递的时候,由于传递的参数是__w64 int类型,就会

2008-05-20 14:01:00 1323 3

原创 终于完成了3D空间寻路的心愿

主要工作有三:一、数据组织。根据3D模型得到一个PathMesh,这个PathMesh里记录了三角形与边的邻接信息,边与三角形的邻接信息,边的端点,边的方程(用于求解线段最短距离)。从而间接知道边与边的邻接信息。路径点除了首尾,都通过边来计算。这个数据容易得到。二、路径搜索算法。一开始使用A*算法,路径不是很好。因为评估函数不好写,评估函数只能描述两个点之间的空间距离,但是无法描述上下楼很

2008-05-08 17:17:00 2959 2

原创 动画抖动

今天终于解决了动画抖动的问题 首先描述下动画抖动的表现:就是将人物拉近到基本充满屏幕的时候,运动比较快的肢端明显运动不平滑。 一开始怀疑动画代码写得有问题,仔细检查代码后没有发现问题。再次怀疑浮点运算误差造成的,因为骨骼动画中,骨骼的运算,是靠从跟骨骼,一级一级级联运算过来的,在肢端级联次数是最多的。更改编译选项,从原来的最快的浮点运算改为最精确的浮点运算。问题没有解决。然后通过在同一帧里,逐次增

2008-05-06 15:45:00 5569 6

原创 希望AMD和ATI赶紧倒掉

近日流年不利,被CPU和显卡的兼容问题折腾得人都老了.先是AddressU = Wrap;AddressV = Wrap;出问题.在ATI的已知的显卡上,当图片的尺寸不是二的幂次方的时候,效果跟Clamp模式一样.想起野猪跟我说的ATI和NVadie在处理BUG上的态度的差异,我暗自诅咒ATI快倒掉!然后又是QueryPerformanceCounter 在部分AMD的CP

2008-04-22 09:10:00 1379 4

原创 无奈的boss

最近boss性质来了,又写了不少代码,问题一堆,他自己不会解决,让我解决。总体说来,问题来自两个方面:Debug版查找效率——因为Debug实在跑不动Release版找BUG——因为Debug版BUG不出我已经陷入崩溃的边沿了,颠覆了我前半生写代码的观念!

2008-01-22 12:10:00 1030

原创 插值

我看了不少插值的方法,有的方法讲得莫名其妙,一个程序,一些系数,为什么这个系数是1,而不是0.5从来不讲,让人很怀疑其可用性。后来做刀光的时候,采集的刀光的点不够圆滑,需要用到插值——想想自己的高数还没有完全忘光,干脆自己推导一个得了。首先我们要明白什么叫做光滑的曲线,可以这么认为,这个曲线是一个运动物体,在时间[0,1]内运动的轨迹。而要求的光滑的曲线,就是要求物体运动过程中没有速度的突

2007-12-14 17:28:00 2254 2

原创 GPU与粒子

        事情起因是这样的:很久很久以前,前离职同事留下一套完备的粒子系统,boss不满意 ,要找人重新写之。        先说说前同事的粒子系统:一套通用的粒子系统,发射器/效果器/渲染器/粒子池,兼顾2D和3D粒子,实现得相当不错,美术可以用它完成绝大部分效果,而且效果很酷!非常不错的粒子系统。        再说说boss不满意的地方:效率低,部分粒子的初始化慢。效率低,一方面是因为

2007-11-26 16:04:00 2526 1

原创 for循环写法带来的效率差异

应同事需要,对接手的3D模块做了此性能测试,发现vectorfor(size_t i=0; i.size(); i++){...}于是,将大部分循环更改成如下代码:size_t nCount = vectorfor(size_t i=0; i而后,发现效率提升了接近10%!!! 

2007-08-30 12:45:00 1446 1

原创 ATI和NVidia在处理D3DRS_LASTPIXEL的差异

ATI忠实的实现了D3DRS_LASTPIXEL,NVidia则没有。所以,最好的做法就是,永远保持D3DRS_LASTPIXEL为FALSE,方能在两个阵营的显卡上保持一致的显示。 

2007-08-28 22:22:00 1279 1

原创 GC实现

//垃圾回收设想//回收策略,内存整理和多线程问题暂不考虑//必要的限制://1、所有具备垃圾回收功能的类都必须派生自gcBase//2、只能通过gcPtr和gcSPtr来访问gcBase(和派生类),//    也就是说,直接申明gcBase的全局变量和通过原生指针gcBase *都不是合法的//    使用gcBase的全局变量会导致在垃圾回收代码delete一个无效的内存//    通过

2007-08-23 15:49:00 2150

原创 如何模拟《WORD》的窗口形式

如何模拟《WORD》的窗口形式重点:在CChildFrame上做文章。1、利用向导生成一个多文档应用程序 TestMDI,则生成下列类:CAboutDlg,CChildFrame,CMainFrame,CTestMDIApp,CTestMDIDoc,CTestMDIView2、改造CTestMDIApp::InitInstance():pMainFrame->ShowWindow(SW

2002-03-27 08:56:00 1404 1

原创 内存管理源代码

 看到我的《评C/C++实战之内存管理》(http://www.csdn.net/develop/read_article.asp?id=11385)有8xx点的人气,感到非常的欣慰。应网友的要求,现将源代码贴上如下这些代码实现了以下功能:1。内存分配、记录和释放。2。内存分配位置,包括文件名,行号记录。3。内存泄漏检测并指出导致泄漏的代码位置,通过指出文件名,行号和分配次数(

2001-12-06 09:19:00 2443 2

原创 评C/C++实战之内存管理

C/C++实战之内存管理      关键字:C++,内存分配,系统  贴文时间  2001-11-11 21:23:47 原作 Paul_Ni  欢迎大家来到这片大多数程序员都心有余悸的雷区。本世纪伟大的比尔·盖茨曾经失言:640K ought to be enough for everybody  -- Bill Gates 1981相信程序员们都经常要编写一些关于内存分配和

2001-11-24 00:27:00 3427

原创 自动过滤选择的组合框

经过两天的编码调试,完成了一个自动过滤选择的组合框,具有以下优点:1。丝毫不妨碍组合框原有的功能2。根据用户在编辑框里已经输入的单词,从组合框的列表选项过滤出匹配的项,并使用下拉列表显示出来以供用户选择。3。不需要特别的设置。从View/ClassWizard/Member Variables里生成一个CComboBox,然后在源文件里把CComboBox替换成CACComboBox即可;或者

2001-10-11 19:31:00 1352

Visual.Assist.X.v10.5.1738

2009-11-16最新Visual Assist,经正版Norton Internet Security检验无病毒.国内绝大部分破解文件都有病毒,包括CSDN上其他人上传的.

2009-11-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除