自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++DLL中使用WIN32无窗口定时器

项目开发时,使用了SetTimer函数,来打开多个定时器。查了好多方法,有自建定时器类的,有自建消息泵的。而因为我这个定时器是要放在DLL中的,所以自建消息泵的方法看似有用,其实是多此一举。实验中发现,不加消息泵,一样可以收到WM_TIMER消息的。而且,即使这样做了,一样还是收不到类似1,2之类的定时器ID。关于自建类的,我是向来没有什么好感,我觉得解决问题的方法越简单越好,弄得复杂了,

2013-09-17 11:10:06 3559 1

原创 关于DirectSound播放声音缓存的一些认识

关于DirectSound播放声音时缓冲区的工作原理,书上讲的不是很清楚,自己也曾经对这个东西模糊了好久。现在有了自己的一点认识,希望能帮助初学DirectSound的朋友。先看下图,我们将缓存区设置为四部分。这里,缓存区大小的设置,需要在创建DirectSound对象时,利用DSBUFFERDESC这个结构体,设置他的成员变量dwBufferBytes。设置好缓存区的属性以后,我们来看,

2013-08-08 16:03:47 2628

原创 C++中使子函数返回多个值

一般在子函数中使用return语句只能返回一个数值,需要返回两个以上的参数,就要利用形参的引用来返回,参考以下代码:#include #include using namespace std;int FunBack(int x,int &y,int &z){ y=x*2; z=y*2; return 0;}int main(){ int a,b,c; cin>>a; F

2013-08-01 10:52:28 3145

原创 VC++能用的,遍历文件夹及子文件夹文件的代码

参考了论坛里高手们的代码,自己做了小修改~~~#include #include #include #include #include using namespace std; void RecursiveFindFile(CString strPath){ CFileFind ff; BOOL bFind = ff.FindFile(strPath + "\\*.*

2013-07-29 20:00:38 882

转载 CString和string的互相转换

CString->std::string 例子:CString strMfc=“test“;std::string strStl;strStl=strMfc.GetBuffer(0);std::string->CString  例子:CString strMfc;std::string strStl=“test“;strMfc=strStl.

2013-07-29 17:48:49 742

原创 关于VC++里cin输入不能正确结束的解决办法

前段时间在学习《c++ primer》这本书时,发现一个例程,其中有一段是:while(cin>>word)cout这段代码在执行时是没有错误的,可是我打算在循环里面把输入的字符串赋值给其他的字符串,来进行下一步操作时,就出现情况了,代码如下:while(cin>>pathin)spath=pathin.c_str();输入完成,按回车,没有反应,还是能继续输入,考虑后,把

2013-07-29 17:47:56 1843

转载 编写高质量代码:改善C++程序的150个建议(十八)

建议34:用智能指针管理通过new创建的对象  前面的建议中我们不厌其烦的一再重复:内存泄漏是一个很大很大的问题!为了应对这个问题,已经有许多技术被研究出来,比如Garbage Collection(垃圾回收)、Smart Pointer(智能指针)等。Garbage Collection技术一直颇受注目,并且在Java中已经发展成熟,成为内存管理的一大利器,但它在C++语言中的发展却不顺

2013-07-27 19:30:51 937

转载 编写高质量代码:改善C++程序的150个建议(十七)

建议33:小心翼翼地重载operator new/ operator delete  虽然C++标准库已经为我们提供了new与delete操作符的标准实现,但是由于缺乏对具体对象的具体分析,系统默认提供的分配器在时间和空间两方面都存在着一些问题:分配器速度较慢,而且在分配小型对象时空间浪费比较严重,特别是在一些对效率或内存有较大限制的特殊应用中。比如说在嵌入式的系统中,由于内存限制,频繁地

2013-07-27 19:29:14 799

转载 编写高质量代码:改善C++程序的150个建议(十六)

建议31:了解new_handler的所作所为  在使用operator new申请内存失败后,编译器并不是不做任何的努力直接抛出std::alloc异常,在这之前,它会调用一个错误处理函数(这个函数被称为new-handler),进行相应的处理。通常,一个好的new-handler函数的处理方式必须遵循以下策略之一:  Make more memory available(使更大

2013-07-27 19:28:18 882

转载 编写高质量代码:改善C++程序的150个建议(十五)

建议29:区分new的三种形态  C++语言一直被认为是复杂编程语言中的杰出代表之一,不仅仅是因为其繁缛的语法规则,还因为其晦涩的术语。下面要讲的就是你的老熟人—new:  它是一个内存管理的操作符,能够从堆中划分一块区域,自动调用构造函数,动态地创建某种特定类型的数据,最后返回该区域的指针。该数据使用完后,应调用delete运算符,释放动态申请的这块内存。  如果这就是你

2013-07-27 19:26:32 808

转载 编写高质量代码:改善C++程序的150个建议(十四)

第3章 说一说“内存管理”的那点事儿  在C++的世界里,“烫”和“屯”是我们遇到得最多的两个汉字(限于VC用户)。可能有人不禁要问:这是为什么呢?  答案是:在VC中,栈空间未初始化的字符默认是-52,补码是0xCC。两个0xCC ,即0xCCCC在GBK编码中就是“烫”;堆空间未初始化的字符默认是-51,两个-51在GBK编码中就是“屯”。 二者都是未初始化的内存。  

2013-07-27 19:24:29 776

转载 编写高质量代码:改善C++程序的150个建议(十三)

建议25:尽量用const、enum、inline替换#define  在建议4中,我们已经详细说明了在使用宏时应注意的一些问题。“表面似和善、背后一长串”绝对是对宏的形象表述。宏的使用具有一些优点:能减少代码量(比如简单字符替换重复的代码),在某种程度上提供可阅读性(比如MFC的消息映射),提高运行效率(比如没有函数调用开销)。  然而谈到宏,绝对绕不开预处理器。把C/C++源码

2013-07-27 19:22:55 769

转载 编写高质量代码:改善C++程序的150个建议(十二)

建议23:尽量使用C++标准的iostream  IO是我们最基本的需求之一。比如当我们进入C++世界时所接触的第一个程序HelloWorld,采用printf()或operator//Version 1  #include  stdio.h > int main()  {       printf("Hello World");       return 

2013-07-27 19:21:17 835

转载 编写高质量代码:改善C++程序的150个建议(十一)

建议21:尽量用new/delete代替malloc/free  在C语言中,我们已经熟悉利用malloc/free来管理动态内存,而在C++中,我们又有了新的工具:new/delete。你不禁会产生疑问—有了malloc/free为什么还要new/delete 呢?使用malloc/free和使用new/delete又有什么区别呢?首先来分析一下下面的代码片段:

2013-07-27 19:12:54 782

转载 编写高质量代码:改善C++程序的150个建议(十)

第2章 从C到C++,需要做出一些改变  C++语言之父当初设计该语言的初衷是“a better C”,所以C++一般被认为是C的超集合,但是不要因此而误以为,“这意味着C++兼容C语言的所有东西”。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点,大部分的C代码可以很轻易地在C++中正确编译,但仍有少数差异,导致某些有效的C代码在C++中无法通过编译。  因此,从C到

2013-07-27 19:11:01 847

转载 编写高质量代码:改善C++程序的150个建议(九)

建议17:提防隐式转换带来的麻烦  在C/C++语言的表达式中,允许在不同类型的数据之间进行某一操作或混合运算。当对不同类型的数据进行操作时,首先要做的就是将数据转换成为相同的数据类型。C/C++语言中的类型转换可以分为两种,一种为隐式转换,而另一种则为建议11中提及的显式强制转型。显式强制转型在某种程度上还有一定的优点,对于编写代码的人来说使用它能够很容易地获得所需类型的数据,对于阅读代

2013-07-27 16:31:16 961

转载 编写高质量代码:改善C++程序的150个建议(八)

建议15:尽量不要使用可变参数  在某些情况下我们希望函数参数的个数可以根据实际需要来确定,所以C语言中就提供了一种长度不确定的参数,形如:“...”,C++语言也继承了这一语言特性。在采用ANSI标准形式时,参数个数可变的函数的原型是:type funcname(type para1, type para2, ...);  这种形式至少

2013-07-27 16:29:21 910

转载 编写高质量代码:改善C++程序的150个建议(七)

建议13:掌握变量定义的位置与时机  在C/C++代码中,变量是一个不得不提的关键词。变量在程序中起着不同寻常的作用。所有的代码中肯定离不开各种类型变量的影子,既有内置类型的,又有自定义类型的。虽然常见,但使用它也是有一定的技巧与玄机的。掌握了这些技巧与玄机,在合适的时机将变量定义在合适的位置上,会使代码变得更具可读性与高效性。  C++规则允许在函数的任何位置定义变量,当程序执行

2013-07-27 16:27:35 803

转载 编写高质量代码:改善C++程序的150个建议(六)

建议11:将强制转型减到最少  C++ 在设计中一直强调类型安全,而且也采取了一定的措施来保障这条准则的执行。但是,从C继承而来的强制转型却破坏了C++类型系统,C中的强制转型可谓是“无所不能”,其超强的能力给C++带来了很大的安全隐患。强制转型会引起各种各样的麻烦,有时这些麻烦很容易被察觉,有时它们却又隐藏极深,难以察觉。  在C/C++语言中,强制转型是“一个你必须全神贯注才能

2013-07-27 16:25:03 998

转载 编写高质量代码:改善C++程序的150个建议(五)

建议8:拒绝晦涩难懂的函数指针  在C/C++程序中,数据指针是最直接也是最常用的,理解起来也相对简单容易,但是函数指针理解起来却并不轻松。函数指针在运行时的动态调用中应用广泛,是一种常见而有效的手段。但是,如果不注重一定的使用技巧,函数指针也会变得晦涩难懂。  告诉我下面定义的含义是什么?void (*p[10]) (void (*)());

2013-07-27 16:23:38 938

转载 编写高质量代码:改善C++程序的150个建议(四)

建议5:不要忘记指针变量的初始化  可以说指针是C/C++语言编程中最给力的工具。指针,让我们直接去面对最为神秘的内存空间,赋予我们对内存进行直接操作的能力。由于指针操作执行速度快、占用内存少,众多程序员对它深爱不已。但是,它的灵活性和难控制性也让许多程序员觉得难以驾驭,以致到了谈指针色变的程度。  指针就是一把双刃剑。用好了它,会给你带来诸多便利,反之,则往往会引发意想不到的问题

2013-07-27 16:21:53 718

转载 编写高质量代码:改善C++程序的150个建议(三)

建议3:对表达式计算顺序不要想当然  一条一条的表达式构成了C/C++代码的主体。接下来我们就来说说表达式的计算顺序。这些都是很琐碎的事情,但不可否认却又是非常有价值的。也许你会觉得下面的代码片段很熟悉:if( nGrade & MASK == GRADE_ONE )      ... // processing codes 

2013-07-27 16:19:39 679

转载 编写高质量代码:改善C++程序的150个建议(二)

建议1:区分0的4种面孔  0在C/C++语言中绝对是一个多面手,它扮演着多样的角色,拥有着多种面孔。总结起来包括以下几种角色:整型0、空指针NULL、字符串结束标志 '\0'、逻辑FALSE/false,不同的角色适用于不同的情形,下面我们按照上述顺序一一介绍。  整型0  这是我们最熟悉的一个角色。作为一个int类型,整型0占据32位的空间,其二进制表示为:

2013-07-27 16:14:43 693

转载 编写高质量代码:改善C++程序的150个建议(一)

第1章 从C继承而来的  C和C++可以说是所有编程语言中关系最为紧密的两个。在目标上,C++被定位为“a better C”;在名称上,C++有一个乳名叫做“C with classes”;在语法上,C更是C++的一个子集,C++几乎支持C语言的全部功能。如果采用C++的方法来描述,以下方式恰如其分:class C{};  class CPlusPlus

2013-07-27 16:13:12 868

原创 VC++设计的DirectSound播放声音程序学习小记

最近在尝试使用c++编写一个简单的DirectSound播放器,仅播放WAV格式的声音文件,主要是实现在线播放流数据的功能。首先,介绍一下程序的设计,利用DirectSound播放声音,需要以下几个步骤:1)创建并初始化一个支持IDirectSound8接口的对象;2)设置应用程序与声音设备的协作级别;3)创建一个声音缓存对象;4)获取IDirectSoundBuffer8接口

2013-07-26 17:09:51 3000 1

转载 互斥对象、事件对象与关键代码段的比较

首先,互斥对象和事件对象都属于内核对象,利用内核对象进行线程同步时,速度较慢,但利用互斥对象和事件对象这样的内核对象,可以在多个线程中的各个线程间实现同步。其次,关键代码段工作在用户方式下,同步速度较快,但在使用关键代码段时,很容易进入死锁状态,因为在等待进入关键代码段时无法设定超时值。通常,在编写多线程程序并需要实现线程同步时,首选关键代码段,由于它的使用比较简单,如果是在MFC程序中使

2013-07-26 10:09:25 819

原创 dxSDK jun10与dx8的兼容问题

今天开始研究关于DirectSound播放声音的问题,后来发现总是提示dmksctrl.h和dxerr8.h找不到的问题。自己对DX并不是很了解,查了一些东西,知道是DXSDK在版本更新的时候,头文件也发生了一些改变。所以把dxerr8.h改为dxerr.h,然后将附加依赖项的dxerr8.lib改为dxerr.lib,把dmksctrl.h注释掉,发现调试可用了。目前不知道对程序功能会有什么影响

2013-07-25 15:53:31 1713

tomcat和java web源码

孙老师java web教程的源码,分享给大家,欢迎各位下载~~~

2018-11-06

VS2008屏幕取色程序

使用VS2008实现的简单MFC屏幕取色程序

2013-06-22

空空如也

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

TA关注的人

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