C++
ctbinzi
爱折腾的程序猿
展开
-
gcc 编译参数整理
O3: 打开所有-O2优化选项并且增加 -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload和-ftree-vectorize优化选项。gcc main.o -o main // 把二进制代码链接成可执行文件,在不加 -E -S -c 这几个参数时,默认编译成可执行文件。eg:gcc -S main.i -o main.s // 把标准输出文件编译成汇编代码,即把C代码编译成汇编代码。原创 2022-09-08 14:57:45 · 1278 阅读 · 0 评论 -
C++编码过程中不得不注意的几个方面
1.指针的使用。使用指针之前一定要做判断if(NULL != point);一定要做内存申请失败判断void * p = new Class;if(NULL == p){ ...}内存销毁后,一定要将指针赋空值delete point;point = NULL;2.文件的使用。打开文件后一定要记得关闭文件,需要注意的是,这与文件打开方式是Write还是Read无关,都得严格按照要求打开/关闭文件。3.线程锁的使用。需要要强调的是,在Lock和Unlock区域内不应该有函数调用,这是比较隐秘的BUG滋生地,原创 2011-05-09 10:39:00 · 689 阅读 · 1 评论 -
TN017: Destroying Window Objects(Windows控件销毁过程详述)
http://msdn.microsoft.com/en-us/library/5zba4hah.aspxTN017: Destroying Window Objects This note describes the use of the CWnd::PostNcDestroy method. Use this method if you want to do c原创 2010-03-19 13:34:00 · 766 阅读 · 0 评论 -
截屏并保存JPG图片
//获取截图数据 CDC *pDC; pDC = CDC::FromHandle(::GetDC(GetDesktopWindow()->m_hWnd)); if(pDC == NULL) return; int BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL); CRect rcClient; GetWindowRect(原创 2009-12-29 13:58:00 · 996 阅读 · 0 评论 -
进程通信——使用WM_COPYDATA消息通信
3.4 使用WM_COPYDATA消息通信对于少量数据可以用WM_COPYDATA方便地实现通信。由于SendMessage()是阻塞的,只有接收方响应了消息,SendMessage()才能返回,否则一直阻塞。所以,对于大量数据来说,用SendMessage()就容易造成窗口假死。3.4.1 通过WM_COPYDATA消息实现进程间通信的方法在Win32中,WM_COPYDAT原创 2009-12-17 14:16:00 · 593 阅读 · 0 评论 -
cocos编译Android版本问题总结
今天编译cocos2d-x项目到Android平台遇到编译不通过的问题,编译错误提示是一堆乱码。主要原因有:1.文件编码格式错误 或 换行符格式错误,修改方法为,在VS2012里面选择 文件->高级保持选项,如下图编码选择 简体中文(GB2312)-代码页936 ,行尾选择 Unix(LF)2.Android.mk文件修改错误,文件名变更后,没有及时修改An原创 2014-04-24 21:22:49 · 2121 阅读 · 0 评论 -
cocos2d-x 发布 android 版本心得
1.代码里面如果用了stl 函数库,记得#include原创 2014-04-16 20:48:20 · 1414 阅读 · 0 评论 -
使用Tcmalloc的性能测试结果报告,比malloc有大幅度提高
使用Tcmalloc的性能测试结果今天研究了一下tcmalloc的使用,感觉效果惊人,很是激动,特此写出来以飨读者。关于tcmalloc的介绍,参考文章:TCMalloc:线程缓存的Malloc,是从google官方网站翻译出来的。Tcmalloc的使用很简单,只需要-ltcmalloc_minimal即可。测试代码:#include #include转载 2014-04-15 21:18:35 · 3912 阅读 · 3 评论 -
内存泄露检测—VLD工具
一. VLD工具概述Visual Leak Detector(VLD)是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号; 可以得到泄露内存的完整数据; 可以设置内存泄露报告的级别;并且是开源免费的。 二. VLD下载http://www.codep转载 2014-04-15 19:23:12 · 962 阅读 · 0 评论 -
一个高效的内存池实现
在高效C++编程中看到一个不错的内存池实现方案,这里共享下,大家看看有什么不足。代码很简单,如下:templateclass CMemoryPool{ public: enum { EXPANSION_SIZE = 32}; CMemoryPool(unsigned int nItemCount = EXPANSION_SIZE转载 2014-04-15 20:02:01 · 1848 阅读 · 0 评论 -
常见C++内存池技术
总结下常见的C++内存池,以备以后查询。应该说没有一个内存池适合所有的情况, 根据不同的需求选择正确的内存池才是正道.(1)最简单的固定大小缓冲池 适用于频繁分配和释放固定大小对象的情况, 关于这个内存池,我这里总结过:一个高效的内存池实现(2)dlmalloc 应该来说相当优秀的内存池, 支持大对象和小对象,并且已被广泛使用。到这里下载:ftp转载 2014-04-15 20:05:57 · 2216 阅读 · 0 评论 -
GetAsyncKeyState()与GetKeyboardState()
PC平台上的单键异步调用.这个调用是WINDOWS特定的, 在WIN32 API中,其语法如下: short GetAsyncKeyState(int Keycode);下面的例子是检查左SHIFT键是否按下: if(GetAsyncKeyState(VK_LSHIFT)) { //whatever }注意:由于调用的性质,可以检查多个值.下一个例子测试左SHIFT键与RETUR原创 2009-09-02 10:06:00 · 1074 阅读 · 0 评论 -
Keycode对照表
字母和数字键的键码值(keyCode)按键键码按键键码按键键码按键键码A65J74S83149B66K75T84250C67L76U85351D68M77V86452E69原创 2009-09-02 09:52:00 · 632 阅读 · 0 评论 -
CustomDraw中pResult的返回值定义列表
CDRF_DODEFAULT (0x00000000)指示控件自行绘制。该值为默认值,不应该将它与其他值组合在一起。CDRF_SKIPDEFAULT (0x00000004)用于指定控件根本不进行任何绘制。CDRF_NEWFONT (0x00000002)当代码更改绘制项/子项的字体时使用。原创 2009-09-02 15:18:00 · 1538 阅读 · 0 评论 -
TrackMouseEvent函数
TrackMouseEvent函数在鼠标离开某一窗口或在某一窗口上停留超过某一特定时间长度时发送消息。其函数原型:BOOL TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack); 参数lpEventTrack是一个指向TRACKMOUSEEVENT结构体的指针。函数执行成功的话返回非零值(true),否则返回零(false)。该函数可以发送的消息包原创 2009-09-02 08:33:00 · 490 阅读 · 0 评论 -
MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法
文档将概述MFC中定制自定义控件的3种方法: 拥有者绘制控件(Owner Drawing Control and Menu) 自绘制控件(self drawing control and menu) 和子集化(subclass) 1 使用MFC方法定制控件必备的几个基本概念: 控制定制风格的控件的几个标准Windows消息: WM_MEASUREITEM WM_COMP原创 2009-09-01 13:29:00 · 985 阅读 · 0 评论 -
TransparentBlt、StretchBlt与BitBlt三个函数的区别
BOOL StretchBlt( int x, //指定目的矩形区域左上角的X坐标 int y, //指定目的矩形区域左上角的Y坐标 int nWidth, //指定目的矩形区域的宽度 int nHeight, //指定目的矩形区域的高度 CDC* pSrcDC, int xSrc, //指定源矩形区域左上角的X坐标 int yS原创 2009-08-31 16:08:00 · 4072 阅读 · 0 评论 -
VC中判断文件夹是否存在的方法(C/C++)
(GetFileAttributes([DirectoryPathName]) & 0xF0000010) == FILE_ATTRIBUTE_DIRECTORY原创 2009-08-27 12:49:00 · 926 阅读 · 0 评论 -
BOOL CDC::BitBlt()
BOOL BitBlt( int x, 目标X坐标 int y, 目标Y坐标 int nWidth, 操作范围宽度 int nHeight, 操作范围高度 CDC* pSrcDC, 源内容 int xSrc, 源X坐标 int ySrc, 源Y坐标 DWORD dwRop 光栅操作方式);下面列出了一些常见的光栅操作代码原创 2009-08-21 11:26:00 · 2230 阅读 · 9 评论 -
VC界面库
GuiToolkit(开源,类似Visual Studio 2003风格)http://www.beyondata.com/default.htmGardenUI(免费,界面效果挺好的,XML,代码 界面 分离)http://www.gardenui.com/CJLib(开源,免费,UNICODE编码,是xtreme toolkit的前生,但xtreme toolkit收费了)http:/原创 2009-08-21 10:14:00 · 614 阅读 · 0 评论 -
Win32 SDK Application
用SDK的Win32 API编写各种Windows应用程序,有其共同的规律:首先是编写WinMain函数,编写处理消息和事件的窗口过程WndProc,在WinMain里头注册窗口(Register Window),创建窗口,然后开始应用程序的消息循环。原创 2009-08-24 11:10:00 · 551 阅读 · 0 评论 -
关于非模式对话框(Modeless Dialog)无法响应WM_KILLFOCUS消息问题
做了一个为了做一个漂亮的右键菜单,用非模式对话框进行模拟,结果没能捕获WM_KILLFOCUS事件。 经过不断尝试,发现以下两点: 1. 要想捕获ON_KILLFOCUS事件,必须同时去捕获ON_SETFOCUS事件; 2. 在现实非模式对话框的时候设置其焦点,如:this.SetFocus();原创 2009-11-30 13:51:00 · 2195 阅读 · 2 评论 -
VS 2005环境下MFC工程断点停不住的问题及解决办法
最近再做一个MFC项目,VS 2005环境。调试过程中发现有一个文件中的断点停不住,经过百般推敲,发现时switch...case...捣鬼。 该项目是在原有代码基础上改的,源代码相对来说不是很规范,很多case采用return方式弹出,没有明确表明break;语句。也就是这个原因导致调试时导致断点停不住。 解决办法也就很简单了,找出该文件中所有的switch...case...语原创 2009-12-02 10:40:00 · 924 阅读 · 0 评论 -
堆与栈的区别【收藏】
网上看到的两篇关于堆与栈的介绍,讲的比较清楚。1 堆和栈的区别 原地址:http://blog.csdn.net/goingup/archive/2006/03/07/618309.aspx 在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。 首先,我们举一个例子: void f() {原创 2009-11-26 08:51:00 · 583 阅读 · 0 评论 -
批量更新组件大小位置信息,BeginDeferWindowPos -- DeferWindowPos -- EndDeferWindowPos
BeginDeferWindowPos 函数功能:该函数为一个多窗口位置结构分配内存并且返回该结构的句柄。 函数原型:HDWP BeginDeferWindowPos(int nNumWindows); 参数: nNumWindows:指示存储位置信息的初始窗口数目。如有必要,DeferWindowPos函数可以增加该结构的大小。 返回值:如果函数成功,返回多窗口位置结构。如果原创 2009-11-25 17:24:00 · 4016 阅读 · 0 评论 -
PreSubclassWindow 与 OnInitDialog 的冲突
自己写了一个继承CStatic的类CMenuStatic,用于响应鼠标移入和移出该Static控件,并更新其显示外观。 在一个Dialog中加入Static控件,并设置其类为CMenuStatic。同时,该Dialog响应OnInitDialog事件。 发现当Dialogue中有OnInitDialog事件响应函数时,CMenuStatic中的PreSubclassWindow处理原创 2009-11-23 20:31:00 · 840 阅读 · 0 评论 -
Winsock总结
1.Winsock的启动和终止启动调用int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)函数对Winsock DLL进行初始化,参数说明如下:wVersionRequested:用于指定要加载的Winsock库版本,高四位是副版本号,第四位是主版本号;lpWSAData:指定了加载的库版本的相关信息,其格式如下原创 2009-09-15 12:53:00 · 900 阅读 · 0 评论 -
VC学习笔记(20090821)
DC:设备描述表GDI:图形设备接口CDC:MFC将DC和GDI封装在一起的产物 RECT:结构体,用于定义一个矩形的位置和大小CRect:RECT的派生类,增加了很多方法CPoint:用于定义一个点 CDC Members Base Class MembersCObject MembersColor and Co原创 2009-08-21 09:30:00 · 797 阅读 · 0 评论