Visual C++
文章平均质量分 57
appstudy
C ;面向对象;设计模式;网络编程;ACE;架构设计;游戏开发;高性能服务器开发
展开
-
消息队列
<br />// Test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#include <process.h>#include <queue>using namespace std;class CMessage{public: OVERLAPPED m_ov;};template<class T>class IMessageQueue{原创 2010-08-26 12:19:00 · 363 阅读 · 0 评论 -
模板特化和偏特化
模板特化和偏特化谢宝陵 周 生 摘要:本文通过例子介绍了在 C++标准库中广泛使用的模板特化和偏特化,并指出了模板特化和偏特化的定义规则和应用规则。关键词:模板、特化、偏特化1.引言C++中的模板分为类模板和函数模板,虽然它引进到C++标准中的时间不是很长,但是却得到了广泛的应用,这一点在STL中有着充分的体现。目前,STL在C++社区中得到了广泛转载 2010-05-04 22:50:00 · 379 阅读 · 0 评论 -
如何利用.pdb文件去调试
如何利用.pdb文件去调试 Posted on 2010-04-20 16:35 metaboy 阅读(42) 评论(0) 编辑 收藏 所属分类: 10 C++ <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1原创 2010-04-26 18:07:00 · 2356 阅读 · 0 评论 -
C++应用程序性能优化读书笔记
粗浅的看了下,有点虎头蛇尾。暂且记下。第一篇 C++程序优化基础第1章 C++对象模型1.1 基本概念1.1.1 程序使用内存区 一个程序占用的内存区一般分为5种:全局/静态数据区、常量区、代码区、栈、堆。 例子代码: #include #include int nGlobal = 100; int main(void)转载 2010-04-23 11:02:00 · 470 阅读 · 0 评论 -
VisualSVN
VisualSVN是一个Visual Studio插件,集成Subversion和TortoiseSVN无缝地到Visual Studio 。 部署VisualSVN, 所有的开发人员将使用Subversion自信和有效地管理和保护您的组织的工作成果。 VisualSVN 1.7.3.破解版 网上搜了很久才找到 内含原版安装程序和破解补丁 点击下载 VisualSVN 1.原创 2010-04-17 11:30:00 · 360 阅读 · 0 评论 -
网络设备原理 应用到 软件设计
集线器设备(全层广播):(1)下行:上层结点发送消息到集线器上的设备,对下层所有设备进行广播,所有设备判断消息后选择接受与拒绝。 (2)上行:下层设备发送消息到上层或同层设备,由HUB的上层结点负责转发或选择路由。 交换机设备(转发表):(1)下行:上层结点发送消息到交换机上的设备,交换设备可进行过滤及转发。 (2)上行:下层设备发送消息到上层或同层设备,交换设备可进行过滤原创 2009-12-25 11:03:00 · 238 阅读 · 0 评论 -
Windbg使用指南(1)---常用命令
debug常用命令解析:1 !address eax查看对应内存页的属性2 vertarget 显示当前进程的大致信息3 !peb 显示process Environment Block4 lmvm 可以查看任意一个dll的详细信息 例如:0:026 lmvm msvcrt (deferred)表示察看msvcrt.dll的信息,但是没有加载symbol可以通过.reload命令来加载 5.rel转载 2009-12-17 11:39:00 · 525 阅读 · 0 评论 -
FLASH封装类
#if !defined(AFX_SHOCKWAVEFLASH_H__E91CB61E_FB9A_4ECD_9082_7AC2E024A7B2__INCLUDED_)#define AFX_SHOCKWAVEFLASH_H__E91CB61E_FB9A_4ECD_9082_7AC2E024A7B2__INCLUDED_#if _MSC_VER > 1000#pragma once原创 2009-10-08 17:09:00 · 3070 阅读 · 2 评论 -
自定义引用计数指针
#ifndef _INTRUSIVE_PTR_H_#define _INTRUSIVE_PTR_H_templateclass intrusive_ptr{public: intrusive_ptr():m_pPtr( NULL ) { }; intrusive_ptr( const intrusive_ptr &intrptr ):m_pPtr( NULL原创 2009-09-29 15:28:00 · 272 阅读 · 0 评论 -
计算代码行代码
#include "stdafx.h"#include #include #include #include #include using namespace std; int g_nFileNum =0 ;BOOL IsRoot(LPCTSTR lpszPath){ TCHAR szRoot[4]; wspri原创 2009-09-27 17:16:00 · 335 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议
转摘自:http://hi.baidu.com/wjtao291/blog/item/6daf83fdea7d751709244df5.html UDT协议-基于UDP的可靠数据传输协议1. 介绍 随着网络带宽时延产品(BDP)的增加,通常的TCP协议开始变的低效。这是因为它的AIMD(additive increase multiplicative decrease转载 2009-08-27 16:29:00 · 588 阅读 · 1 评论 -
Handle-Body与接口、抽象接口
<br />在C++中封装的概念是把一个对象的外观接口同实际工作方式(实现)分离开来,但是C++的封装是不完全的,编译器必须知道一个对象的所有部分的声明,以便创建和管理它。我们可以想象一种只需声明一个对象的公共接口部分的编程语言,而将私有的实现部分隐藏起来。C + +在编译期间要尽可能多地做静态类型检查。这意味着尽早捕获错误,也意味着程序具有更高的效率。然而这对私有的实现部分来说带来两个影响:一是即使程序员不能轻易地访问实现部分,但他可以看到它;二是造成一些不必要的重复编译。 <br />然而C++并没有将原创 2010-06-05 18:10:00 · 971 阅读 · 1 评论 -
不同软件规模下的代码设计原则
<br />不同软件规模下的代码设计原则<br />声明:本文题目所指的“原则”为本文作者原创,系本文作者在多年的软件开发实践中所摸索出来的成果。<br /> <br />背景<br />软件工程在理论研究与实践应用方面都经过了很长时间的发展,甚至与软件本身的历史一样长。伴随着软件工程的长时间的发展,代码设计的内容也变得越来越丰富,复杂度也越来越高,甚至显得有些复杂的过头了。近十年来,敏捷开发思想悄然流行,说明大量的开发者趋向于认同如下的观点:软件工程上的大量原则过于复杂,其复杂度导致开发者遵循这些原则所付转载 2010-06-12 11:33:00 · 870 阅读 · 0 评论 -
VC2003实现 __FUNCTION__ 宏
#include "stdafx.h"#include typedef unsigned long ULONG_PTR,*PULONG_PTR;#define __out_ecount_opt(x)#include #include #include "stdlib.h"#pragma comment(lib,"dbghelp.lib")static LPSTR GetSymbolSearchpath (){ char director转载 2010-08-14 09:11:00 · 955 阅读 · 0 评论 -
也谈Release版本排错
也谈Release版本排错 邓立波 深圳,2008-6作者联系方式:email: libodeng@gmail.commsn: libodeng@gmail.com 通常Release除错都是先通过SetUnhandledExceptionFilter捕获异常,然后生成报告文件,最后定位代码行,主要以下两种方法:(一)通过遍历调用栈,将其调用栈信息输出到文件。然后查找出错地址。查找方式有两种:(转载 2010-08-14 08:48:00 · 598 阅读 · 0 评论 -
如何解决使用SQLite对中文进行模糊查询失效的问题?
<br />test表:<br />id name<br />1 张三<br />2 李四<br />3 王五<br />SELECT * FROM test WHERE name LIKE '%张%' ; 查出来的记录却不止只有一条“张三”<br />原来是SQLite使用的字符集是UTF8, 所以存入数据时如果有中文就应该先转成UTF8,取出来的时候要转回来的ASCCI码转载 2010-06-12 11:34:00 · 808 阅读 · 0 评论 -
如何通过下标删除vector中的指定元素
<br />比如:vector vecID; 中保存了m个ID,这时要删除第n个ID。<br />当然,遍历是一个方法;即vector::itertor it = vecID.begin(); 然后++it n次。<br />更好的方法是:vector::itertor it = vecID.begin() + n; vector的迭代器直接支持这种偏移。<br />然后用vecID.erase(it)方法 删除该元素。转载 2010-06-12 11:43:00 · 3522 阅读 · 1 评论 -
8条SQLServer查询优化方案
<br />1.建立索引的前提下WHERE子句性能 <br /> 最好的是带有"="操作符 <br /> 其次是封闭的区间 <br /> 再其次是开放的区间 <br />2.避免相关子查询 <br />3.避免困难的正规表达式 <br />4.避免使用含有不连续连接词(OR和IN)的WHERE子句 <br />5.WHERE子句中限制数据转换和串操作 <br />6.慎用包含NOT、<>的WHERE子句 <br />7.SELECT时按需取字段 <br />8.勿滥用LIKE关键字转载 2010-06-12 11:34:00 · 200 阅读 · 0 评论 -
8条SQLServer查询优化方案
<br />1.建立索引的前提下WHERE子句性能 <br /> 最好的是带有"="操作符 <br /> 其次是封闭的区间 <br /> 再其次是开放的区间 <br />2.避免相关子查询 <br />3.避免困难的正规表达式 <br />4.避免使用含有不连续连接词(OR和IN)的WHERE子句 <br />5.WHERE子句中限制数据转换和串操作 <br />6.慎用包含NOT、<>的WHERE子句 <br />7.SELECT时按需取字段 <br />8.勿滥用LIKE关键字转载 2010-06-12 11:34:00 · 276 阅读 · 0 评论 -
批处理编译项目,VS2003
@cls @call "%VS71COMNTOOLS%vsvars32.bat" @devenv "XXXX.sln" /build Debug转载 2010-06-13 17:19:00 · 386 阅读 · 0 评论 -
#define P(
<br />#define P(format, ...) do /<br /> { /<br /> printf("%s %s %d " format "/n", __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__); /<br /> fflush(stdout); /<br /> } /<br /> while (0);原创 2010-06-13 12:42:00 · 310 阅读 · 0 评论 -
服务器端引入vld检测内存泄露
<br />影响服务器稳定的原因很多种,内存泄露是其中比较重要的一种。内存泄露严重的,很容易导致当机。而内存泄露的发生很经常。特别是新人介入游戏开发时。作为主程,不可能盯着每一行代码的增加/删除/修改。<br /> 那么 如何快速,有效的发现问题,并定位问题呢?<br /> 传统的方法有,bounds checker或者purify等工具。这些工具是大而全。功能非常完善。但是在实际使用时我们发现,启动一个服务器非常慢。每个点要跟踪,而且有些误报。一天下来,问题找的不多,人倒是很累。<转载 2010-06-12 11:42:00 · 838 阅读 · 0 评论 -
如何让vld支持release版本的内存泄露检测
<br />vld版本1.9h支持vc60及vs2005,vs2008的内存泄露检测,但是只支持debug版本。 <br />通常情况下,我们更关心的是release版本下是否有内存泄露。显然 vld并不能满足我们的要求。 <br />因此,我们需要对vld进行修改。 <br /><br />研究了一下代码,发现主要有几个方面控制导致了vld无法在release下使用: <br />1)首先,VLD通过宏,在vldini.h中直接禁止在release下导出相关函数。 <br />2)其次,vld.cpp中,转载 2010-06-12 11:40:00 · 1764 阅读 · 0 评论 -
SVN代码提交流程
<br />前言:<br />经常从SVN上取最新代码下来后发现编译过不去,查找提交log找到之前提交的人,了解其提交代码的流程后,发现SVN代码提交流程有点问题. SVN代码提交虽然简单,但是如果没严格按照步骤来的话,很容易出错,出现代码覆盖,遗漏提交的情况。现在整理一个SVN提交代码流程的精简的版本。<br />有2种方法,推荐方法1。<br />方法1 通过本地SVN代码库中转提交:<br />1。本地SVN代码库更新<br />为了方便代码提交,建议本地维护一个与SVN对应的,只用来存放最新代码的本转载 2010-06-12 11:36:00 · 7372 阅读 · 2 评论 -
Win32应用程序中进程间通信方法分析与比较
Win32应用程序中进程间通信方法分析与比较 来源:Intetnet 1 进程与进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大转载 2009-05-19 19:49:00 · 398 阅读 · 0 评论 -
使用PostThreadMessage在Win32线程间传递消息
PostThreadMessage的原型是这样的BOOL PostThreadMessage( DWORD idThread, UINT Msg, WPARAM wParam, LPARAM lParam);PostThreadMessage可以用于线程之间的异步通讯,因为它不用等待调用者返回,这也许是线程通讯中最简单的一种方法了。但是要注意以下问题1 .PostThr转载 2009-05-13 16:51:00 · 389 阅读 · 0 评论 -
WinDBG(CDB)实践1-新手指南
Step1 下载最新的Debugging Tools for windows http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx最新版本是6.6.7.5 http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.6.07.5.exe(BTW,如果使原创 2009-05-13 16:49:00 · 445 阅读 · 0 评论 -
C++ 的各种库--转(收藏)
在C++中,库的地位是非常高的。C++之父 Bjarne Stroustrup先生多次表示了设计库来扩充功能要好过设计更多的语法的言论。现实中,C++的库门类繁多,解决的问题也是极其广泛,库从轻量级到重量级的都有。不少都是让人眼界大开,亦或是望而生叹的思维杰作。由于库的数量非常庞大,而且限于笔者水平,其中很多并不了解。所以文中所提的一些库都是比较著名的大型库。标准库标准库转载 2008-07-27 21:15:00 · 789 阅读 · 1 评论 -
一种经典的网络游戏服务器架构
一种经典的网络游戏服务器架构 首先,二话不说,上图(用Windows画图画的。。。)这个图是一个区的架构图,所有区的架构是一样的。上面虚线框的ServerGroup和旁边方框内的架构一样。图上的所有x N的服务器,都是多台一起的。红线,绿线,和蓝线图上也有图示,这里就不多介绍了。关于Agent Server大家也能看出来,其实就是Gate。这里主要介绍下图上的标记了号码的位置的数据连接的内容转载 2008-07-27 20:45:00 · 1192 阅读 · 0 评论 -
#pragma使用
尽管 C 和 C++ 都已经有标准,但是几乎每个编译器 (广义,包含连接器等) 扩展一些 C/C++ 关键字。合理地应用这些关键字,有时候能使我们的工作非常方便。下面随便说说 Visual C++ 中 #pragma 指示符的使用。 一、用#pragma导出DLL函数 传统的到出 DLL 函数的方法是使用模块定义文件 (.def),Visual C++ 提供了更简洁方便的方法原创 2008-07-27 19:03:00 · 246 阅读 · 0 评论 -
C++内存泄露的检测(三)
一 简单的对内存的分配和释放跟踪,并将结果输出到console,它也是一般C++内存泄露的检测原理,来自C++编程思想:(比较简单,大家都可以看的明白的哦)实现如下:MemCheck.h//: C02:MemCheck.h#ifndef MEMCHECK_H#define MEMCHECK_H#include cstddef> // for size_t// Hijack the new原创 2008-07-27 18:54:00 · 394 阅读 · 0 评论 -
verify和assert的区别
上学的时候经常看到一些VC编程方面的书上说,在用VC开发程序的时候,最好用VERIFY宏代替ASSERT,当时不知道是其中的原因,今天看了两个宏的定义,终于明白了。1、在DEBUG模式下,两个宏的功能是一样的2、在RELEASE模式下,ASSERT不会对参数里的表达式进行计算,VERIFY会计算里面的表达式(如果是函数,将会调用该函数)。 部分定义如下:#ifdef _DEBU原创 2008-07-27 18:27:00 · 232 阅读 · 0 评论 -
Visual C++ MFC 中常用宏的含义
AND_CATCHAND_CATCH(exception_class,exception _object_point_name) 说明:定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。在AND_CATCH块中调用THROW_L原创 2008-07-27 18:25:00 · 224 阅读 · 0 评论 -
C++调用约定和名字约定
调用约定:__cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。1、__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,2、_cdecl是C和C++程序的缺省调用原创 2008-07-27 18:56:00 · 238 阅读 · 0 评论 -
C++内存泄露的检测(二)
使用MFC提供的功能来检测内存泄露。使用方法:1)工程是MFC工程,或是工程的设置中有Use MFC in a Shared DLL,2)很多地方说是要定义以下宏#ifdef _DEBUG#define new DEBUG_NEW#endif但是我发现只要include 即可。(大家可以检测一下)3)可以在F5运行程序后,在output窗口中看到如下的内存泄露的显示。(只在de原创 2008-07-27 18:53:00 · 282 阅读 · 0 评论 -
C++内存泄露的检测(一)
一Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法。主要使用函数:_CrtDumpMemoryLeaks();二 实例#define _CRTDBG_MAP_ALLOC //输出更详细的report#include stdlib.h>#include crtdbg.h>//以上的内容必须放在其他include的前面#include原创 2008-07-27 18:51:00 · 291 阅读 · 0 评论 -
C++高效编程忠告
一、#include “filename.h”和#include 的区别#include “filename.h”是指编译器将从当前工作目录上开始查找此文件#include 是指编译器将从标准库目录中开始查找此文件二、头文件的作用加强安全检测通过头文件可能方便地调用库功能,而不必关心其实现方式三、* , &修饰符的位置int *i,j; // better for read i = new in原创 2008-07-27 18:50:00 · 193 阅读 · 0 评论 -
负载均衡--大型在线系统实现的关键(上篇)(再谈QQ游戏百万人在线的技术实现)
本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可以不经作者同意任意转载,但任何对本文的引用都须注明作者、出处及此声明信息。谢谢!! 要了解此篇文章中引用的本人写的另一篇文章,请到以下地址: http://blog.csdn.net/sodme/archive/2004/12/12/213995.aspx 以上的这篇文章是早在去年的时候写的了,当转载 2008-07-29 12:46:00 · 246 阅读 · 0 评论 -
负载均衡--大型在线系统实现的关键(上篇)(再谈QQ游戏百万人在线的技术实现)
本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文可以不经作者同意任意转载,但任何对本文的引用都须注明作者、出处及此声明信息。谢谢!! 在网络应用中,“负载均衡”已经不能算是什么新鲜话题了,从硬件到软件,也都有了很多的方法来实现负载均衡。我们这里讨论的负载均衡,并不是指依靠DNS转向或其它硬件设备等所作的负载均衡,而是指在应用层所作的负载均衡。 一般转载 2008-07-29 12:55:00 · 257 阅读 · 0 评论 -
内核对象同步锁
//临界区锁struct THREAD_CS_MUTEX{ THREAD_CS_MUTEX() { InitializeCriticalSection( &m_hLock ); } ~THREAD_CS_MUTEX() { DeleteCriticalSection( &m_hLock ); } inline void Lock() {原创 2009-04-28 11:53:00 · 283 阅读 · 0 评论