
C/C++经典规范源码分享
lurenceGu
c/c++ 游戏服务器开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl转载 2017-04-06 17:08:06 · 470 阅读 · 0 评论 -
结合 异常捕获体系的 线程基类封装 (三)
//共享锁#if defined(__WINDOWS__)class MyLock{ CRITICAL_SECTION m_Lock ;public : MyLock( ){ InitializeCriticalSection(&m_Lock); } ; ~MyLock( ){ DeleteCriticalSection(&m_Lock); } ; VOID Loc原创 2012-03-30 14:32:50 · 906 阅读 · 0 评论 -
结合 异常捕获体系的 线程基类封装 (一)
////////////////////////////////////////////////////////////////////////// Thread.h//// #ifndef __THREAD_H__#define __THREAD_H__////////////////////////////////////////////////////原创 2012-03-30 14:29:44 · 1000 阅读 · 0 评论 -
值得借鉴的 异常捕获体系 (一)
//--------------------------------------------------------------------------------//// Filename : Assert.h////--------------------------------------------------------------------------------原创 2012-03-30 14:23:14 · 1003 阅读 · 0 评论 -
c++ Oracle OCCI 编程
OCCI数据库ORACLE编程步骤1. 配置环境(1) Occi访问数据库需要occi.h头文件,此文件在oracle安装目录下,必须有oracle库的支持。安装oracle服务端或客户端;(2) 配置NLS_LANG环境变量,必须与数据库的字符编码一致,否则可能出现中文乱码;(3) 配置环境变量,使客户端支持中文显示;(4) 安装C++编程工具和g++编译工具。2. 编写转载 2012-03-09 18:14:18 · 10026 阅读 · 0 评论 -
[面试题]C基础题目-测试下自己(附答案)
编者按:非常基本关于C语言的问题,一个信息类(计算机,资讯工程,电子工程, 通信 工程)专业的本科毕业生应该达到的水平。题目不难,全部都能快速地答完,当然也需要 一定的知识储备。 对于大多数人,我们预期你可能答错 1) 4) 15)题,所以答错3道以内的,我们认为 你很棒 答错5道题以内,我们认为你还不错(你还可能答错第9题) 如果你有6道以上的题目不能答对,基本上我们转载 2012-03-06 10:50:06 · 1796 阅读 · 0 评论 -
流量控制和拥塞控制
拥塞(Congestion)指的是在包交换网络中由于传送的包数目太多,而存贮转发节点的资源有限而造成网络传输性能下降的情况。拥塞的一种极端情况是死锁(Deadlock),退出死锁往往需要网络复位操作。流量控制(Flow Control)指的是在一条通道上控制发送端发送数据的数量及速度使其不超过接收端所能承受的能力,这个能力主要指接收端接收数据的速率及接收数据缓冲区的大小。通常采用停等法或滑转载 2012-03-06 15:23:39 · 690 阅读 · 0 评论 -
Socket一些函数相关的返回值
若无错误发生,recv()返回读入的字节数。如果连接已中止,返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。如无错误发生,listen()返回0。否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError()获取相应错误代码。如无错误发生,则bind()返回0。否则的话,将返回SOCKET_转载 2012-03-06 10:56:30 · 3045 阅读 · 0 评论 -
WaitForMultipleObjects
DWORD WaitForMultipleObject(DWORD dwCount , CONST HANDLE* phObject, BOOL fWaitAll, DWORD dwMillisecinds); dwCount参数用于指明想要让函数查看的内核对象的数量。这个值必须在1与MAXIMUM_WAIT_OBJECTS(在Windows头文件中定义为64之间. p转载 2012-03-06 11:03:46 · 6732 阅读 · 0 评论 -
windows和linux线程内核实现
内核线程:线程切换由内核控制,切换的时候,要从用户态进入内核态,切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。用户级线程:用户态程序自己调度线程切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用smp。目前linux pthread大体是这么做的。windows我不熟悉,但是感觉在windows下面,thread和proc转载 2012-03-06 11:17:13 · 785 阅读 · 0 评论 -
不定参宏
在宏中 不定参用 __VA_ARGS__ 来代替例如 #define ERROR(f,...) printf(f,__VA_ARGS__) 可以在日志中输出 __FILE__ 和 __LINE__ #define ERROR(...) _ERROR_(__FILE__, __LINE__, __VA_ARGS__)#define _ERROR_(file,原创 2012-02-25 22:42:11 · 612 阅读 · 0 评论 -
Effective C++学习笔记:条款2:尽量用<iostream>而不用<stdio.h>
传统的C函数库中scanf和printf不是类型安全的,另外,scanf/printf系列函数把要读写的变量和控制读写格式的信息分开来,这都是很早的用法啦。iostream的cout和cin则相对高级的多!因为类型安全和扩展性是C++的基石,“《”和“》”也提供操作符重载来输出、输入用户自己定义的数据类型,另外,在传递读和写的对象时采用的语法形式也是相同的。如:class Rational转载 2012-02-22 18:02:11 · 565 阅读 · 0 评论 -
Effective C++学习笔记:初始化列表中成员列出的顺序和它们在类中声明的顺序相同
请看下面的代码:templateclass array {public: array(int lowbound, int highbound); ... private: vector data; // 数组数据存储在vector对象中// 关于vector模板参见条款49 size_t size;转载 2012-02-22 15:51:22 · 135 阅读 · 0 评论 -
关于pragma pack的用法 字节对齐
一个很重要的参数#pragma pack(n)数据边界对齐方式:以如下结构为例: struct { char a; WORD b;DWORD c; char d; }在Windows默认结构大小: sizeof转载 2012-02-22 15:49:03 · 503 阅读 · 0 评论 -
关于 重写 printf
void WriteLog( const char* pFmt, ... ){ assert(pFmt); CHECK_CONDITION3((!pFmt)); struct tm stTM; time_t ulCurTime = time(NULL); static uint64_t ulC原创 2011-12-23 16:15:20 · 2175 阅读 · 0 评论 -
模板库的基本使用( 《二》 对象管理)
前面讲了使用模板库进行对象的管理这里我们讲下算法的 管理 代码都很简单就不详细讲解了不懂可以留言或者交流 //=====================================================================================原创 2011-07-18 01:04:02 · 4968 阅读 · 0 评论 -
跨平台网络库的设计
近期在开发一个跨平台的网络库,其目的是为了封装网络底层细节,对外提供一个简易的接口,在这里记载一下设计思路。 网络游戏服务器通常需要2种网络IO:一种是面向大量客户端连接的高连接数的网络IO,一种是服务器间的低连接数,高吞吐量的网络IO,后一种网络IO比较简单,可采取阻塞转载 2011-07-18 00:19:47 · 2708 阅读 · 0 评论 -
实用线程封装(linux)
#ifndef __MPDK_DEF_H__#define __MPDK_DEF_H__#include #include #include #include #include #include #include #include #include #include #inc原创 2011-07-17 23:48:10 · 2842 阅读 · 0 评论 -
线程堆栈!
一个线程的开销包括: 内核模式下的开销(内核堆栈,对象管理所需内存) 用户模式下的开销(线程局部存储、线程环境块、堆栈、CRT、MFC、COM等等等等) 通常,线程数目的瓶颈在于线程自己的堆栈。Visual C++编译器默认设置是每个线程的堆栈大小是1MB。当然,如果你在创建线程时指定较小的堆栈大小,你应该可以创建较多的线程。 但是创转载 2012-03-30 15:55:12 · 978 阅读 · 0 评论 -
#pragma pack 用法详解
pack 为 struct, union 和 class 等的成员对齐指定字节边界. 与编译选项(属性 -> 配置属性 -> C/C++ ->代码生成 -> 结构成员对齐)的 /Zp 开关不同, 它不针对整个项目, 而仅针对模块, 比如一个编译单元.1. #pragma pack(show)以警告信息的形式显示当前字节对齐的值.2. #pragma pack(n)将当前字节对齐转载 2012-03-30 14:14:10 · 1408 阅读 · 0 评论 -
关于 window c++ 编译 soket 重复定义的问题
在编译器中加上 _WINSOCKAPI_ 宏原创 2015-11-04 21:06:25 · 804 阅读 · 0 评论 -
关于lol伤害计算
先计算百分比穿透和减免(所谓穿透就是自己一个人有效果的 比如轻语 减免就是大家都有效果的 比如猴子q 皇子q) 百分比穿透间 乘法叠加 比如猴子q30% 黑切25% 对手200护甲 对手剩余护甲=200*(1-30%)*(1-25%)=200*0.399=80护甲 千万注意 不是30+25% 别以为猴子出黑切轻语就不管对手护甲了 算完了以后 计算固定穿透【和减免转载 2015-10-16 21:31:48 · 2152 阅读 · 0 评论 -
编码转换 c++
//这是个类strCoding (strCoding.h文件)#pragma once#include iostream>#include string>#include windows.h>using namespace std;class strCoding{public: strCoding(void); ~strCoding(void转载 2015-04-08 17:58:40 · 794 阅读 · 0 评论 -
HGE的中文显示解决方案 .
最近在自己借鉴hge写一个2d游戏引擎,无意中看到中文字体的简单解决方案,先记下来备忘。HGE本身并不支持中文的显示,因此我使用由 微妙的平衡 大神提供的解决方案.大神提供的代码本来包含gfxfont.h和gfxfont.cpp文件,只需要将这两个文件添加到工程中即可使用.但是我实在太懒,为了避免每次都添加两个文件到工程中去,于是我擅自将cpp的代码全部移到了.h文件中转载 2014-07-30 17:30:41 · 1682 阅读 · 0 评论 -
网络编程(转)<下>
设置和获得套接口选项获得套接口选项int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln )设置套接口选项: int setsockopt ( int sockfd, int level, int optname, const void * optval, so转载 2013-04-09 15:31:36 · 786 阅读 · 0 评论 -
网络编程(转)<上>
Socket简介BSD Socket接口是TCP/IP网络的API在Linux,Unix和Windows均实现这个接口.BSD Socket的是目前开发网络应用主要接口.绝大部分网络应用均可Socket来开发一个Socket队列是IP应用的基本单位.两个机器通讯相当于两个机器的两个Socket互相通讯的过程.Socket 的本意是插座.每一个激活的socket可以看成是一个跟本地某转载 2013-04-09 15:30:50 · 1288 阅读 · 0 评论 -
VC双缓冲绘图
最早在vchelp上发表过的一篇文章,VChelp已经上不了了,又有好多人问人关于VC双缓冲绘图方面的问题,下面我将这篇文章再重新发出来,供大家学习一下: 用vc做的画图程序,当所画的图形大于屏幕时,当拖动滚动条时屏幕就会出现严重的闪烁情况,为了解决这一问题就得使用双缓冲来解决这一问题,程序产生严重的闪烁问题是因为画图过程中前后两次的画面反差很大造成的人的视觉的闪烁。因为在VC中每次在转载 2013-04-03 20:59:52 · 945 阅读 · 0 评论 -
跨平台的动态链接库的调用
一、三种库函数的链接方式用过C语言的都知道库函数的重要:我们将功能比较独立的部分做成一个个函数,供我们复用。最终对库函数的引用有3种方式:方式链接时刻库指定时刻特点静态链接编译时编译时编译时检查链接错误,编入运行程序(运行程序独立)动态链接运行时编译时检查链接错误,运行时调入依赖库运行时运行转载 2013-03-08 13:03:23 · 1836 阅读 · 0 评论 -
TCP协议三次握手过程分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急转载 2012-12-04 02:17:22 · 1007 阅读 · 0 评论 -
utf8,GBK,转码,C++
MultiByteToWideChar概述 函数功能:该函数映射一个字符串到一个宽字符(unicode)的字符串。由该函数映射的字符串没必要是多字节字符组。 函数原型: int MultiByteToWideChar( UINT CodePage, DWORD dwFlags, LPCSTR lpMultiByteStr, int转载 2012-11-26 14:37:53 · 1406 阅读 · 0 评论 -
C/C++中调用LUA函数
1配置工作环境a下载LUA安装包sf_200472410155.zip b 然后,解压用于WIN32下的安装包。放在一个盘的目录下如:C:/LUA50 c 打开VC++6.0,点击Project下的Setting中将include目录设为C:/LUA50。并在LIB库中加入lua+lib.lib,并将C:/LUA50下的Lua+lib.转载 2012-04-01 17:03:04 · 1392 阅读 · 0 评论 -
首先讲一下 TL中使用Lua脚本的过程 脚本中的Timer过程
1.首先在c++源码中添加需要注册到Lua的函数 INT LuaFnSetTimer(Lua_State* L) { LUA_ENTER_FUNCTION SceneID_t sceneId = Lua_ValueToNumber(L,1); ObjID_t selfId = Lua_ValueToNumber(L,2); ScriptID_t scriptI原创 2012-04-01 18:09:55 · 4711 阅读 · 0 评论 -
设置socket缓冲区大小
socket发送数据时候先把数据发送到socket缓冲区中,之后接受函数再从缓冲区中取数据,如果发送端特别快的时候,缓冲区很快就被填满(socket默认的是1024×8=8192字节),这时候我们应该根据情况设置缓冲区的大小,可以通过setsockopt函数实现 int setsockopt( SOCKET s, int level, int转载 2012-04-01 14:26:54 · 1553 阅读 · 0 评论 -
STL的三个基本容器 vector list deque
vector和built-in数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取,即[]操作符,但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝,另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。 list就是数据结构中的双向链表(根据sgi stl源代码),因转载 2012-03-31 13:17:34 · 1127 阅读 · 0 评论 -
结合 异常捕获体系的 线程基类封装 (二)
#include "stdafx.h"//////////////////////////////////////////////////////////////////////////////////// Thread.cpp////// Last Updated : 2005.03.22//////////////////////////////////////原创 2012-03-30 14:30:20 · 1054 阅读 · 0 评论 -
值得借鉴的 异常捕获体系 (三)
#if defined(__WINDOWS__) #if defined(NDEBUG) #define __ENTER_FUNCTION {try{ #define __LEAVE_FUNCTION }catch(...){AssertSpecial(FALSE,__FUNCTION__);}} #else #define __ENTER_FUNCTION {try{原创 2012-03-30 14:26:38 · 851 阅读 · 0 评论 -
值得借鉴的 异常捕获体系 (二)
#include "stdafx.h"//--------------------------------------------------------------------------------// // Filename : Assert.cpp ////-------------------------------------------------------原创 2012-03-30 14:23:55 · 758 阅读 · 0 评论 -
模板库的基本使用( 《一》 对象管理)
#include "brd_thread.h"class CMain; // 对一类对象进行管理template class CTClass{public: CTClass(uint32_t uiNum=120000); virtual ~CTClass(void);p原创 2011-07-18 00:55:55 · 698 阅读 · 0 评论 -
自动寻路 穿交路点算法(线段相交)
<br />#include <Windows.h><br />#include <iostream><br />using namespace std;<br /><br />#pragma comment( lib,"winmm.lib")<br />/*<br />struct point{ <br /> int x; <br /> int y; <br />}; <br />struct v{ <br /> point start; <br /> point end; <br />}; <br />原创 2010-06-23 09:31:00 · 982 阅读 · 0 评论 -
使控件拥有透明背景色
默认情况下,控件不支持透明背景色。但是,通过使用构造函数中的 Control.SetStyle 方法,可以让控件拥有不透明、透明或半透明的背景色。Control 类的 SetStyle 方法用于为控件设置特定的样式首选项,并可用来启用或禁用对透明背景色的支持。使控件拥有透明背景色 在控件的代码编辑器中找到构造函数。 在构造函数中调用窗体的 SetStyle。 SetStyle(Co转载 2010-03-08 10:48:00 · 858 阅读 · 0 评论