![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
小小玮
以梦为马
展开
-
开发一个 c++ 网络库
zbluenet (蓝网) 跨平台 c++ 服务器网络库抽空研究了一下muduo网络库,看了一些github上优秀的源码,自己实现了一个c++网络库,基本功能已经完成,还在开发中github地址: https://github.com/zhengjinwei123/GameTech/tree/main/zbluenet1. 跨平台1. 支持windows 平台, 使用vs2017 编译2. 支持 linux 平台, make 一键编译2. 异步多线程事件驱动1. windows 上使用 se原创 2021-08-02 14:23:37 · 420 阅读 · 0 评论 -
windows 下 线程封装
// thread_handle_test.cpp : 定义控制台应用程序的入口点。///************************************************************************//* author:郑金玮time:2014/07/09desc:impl thread process*//******************原创 2014-07-09 11:31:12 · 542 阅读 · 0 评论 -
ansi 与unicode转换
#include #include #include #define BUFF_SIZE 1024wchar_t * ANSIToUnicode( const char* str ){ int textlen ; wchar_t * result; textlen = MultiByteToWideChar( CP_ACP, 0, str,-1, NULL转载 2014-07-25 16:37:23 · 678 阅读 · 0 评论 -
STL字节对齐分配策略
今天无意中看了一下STL,发现STL中的空间配置器有两个等级原创 2014-07-25 14:26:52 · 1079 阅读 · 0 评论 -
stringstream 的用法
【本文来自】http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库转载 2014-07-02 19:06:20 · 498 阅读 · 0 评论 -
c++实现 日志记录
在服务器开发,日志记录是非常重要的一个环节,原创 2014-06-25 15:33:24 · 1134 阅读 · 0 评论 -
stringstream 实现类型转换的简单案例
// ostringtreamTest.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;templateout_type type_convert(const in_value_type& t){ stringstream _sstream; _sstream<<t;原创 2014-07-03 13:36:17 · 737 阅读 · 0 评论 -
c语言 异常捕捉 setjmp & longjmp
此文是学习 C专家编程 中的笔记。setjmp和longjmp是C语言所独有的,它们部分弥补了C语言有限的转移能力。函数说明(来自wiki百科):int setjmp(jmp_buf env)建立本地的jmp_buf缓冲区并且初始化,用于将来跳转回此处。这个子程序保存程序的调用环境于env参数所指的缓冲区,env将被longjmp使用。如果是从setjmp直接调用返回,转载 2014-06-11 20:12:09 · 777 阅读 · 0 评论 -
c++ 获取两个标准日期之间相差的秒数
在游戏服务器中经常要操作日期和时间用来为游戏原创 2014-07-19 14:30:09 · 8304 阅读 · 0 评论 -
memcpy与memmove 的区别
memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。memmove的处理措施:(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝(3)当源内存转载 2014-07-18 15:34:31 · 562 阅读 · 0 评论 -
c++ 简单模拟实现 游戏定时开启任务
// game_task.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include #include #include #include #include using namespace std;// time_test.cpp : 定义控制台应用程序的入口点。///////////////原创 2014-07-19 16:48:40 · 2914 阅读 · 0 评论 -
c++训练营---继承,多态,重载
// demo.cpp : 定义控制台应用程序的入口点。//通过此例程了解c++的类,继承,多态,重载,设计模式里的简单工厂方法#include "stdafx.h"#include #include using namespace std;//鸟的抽象类,为用户提供接口class CBird{public: //c++中的类默认是内联的,如果在类声明的同时原创 2013-09-11 17:00:26 · 993 阅读 · 0 评论 -
C++ 模板特化
说起C++的模板及模板特化, 相信很多人都很熟悉 ,但是说到模板特化的几种类型,相信了解的人就不是很多。我这里归纳了针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板。这里用一个简单的例子来说明这三种情况:// general versiontemplateclass T>class Compare{pub转载 2014-07-25 17:40:27 · 541 阅读 · 0 评论 -
timeb 的使用
// localtime_test.cpp : 定义控制台应用程序的入口点。///************************************************************************//*author:郑金玮time:2014/07/08desc:impl timeb test*//****************************原创 2014-07-08 19:35:06 · 6458 阅读 · 0 评论 -
protobuf的编译和使用,在windows平台上
0 准备工作:(1)下载protobufhttps://github.com/google/protobuf/releases下载的是cpp版本,选择当前最新版本即可(2)安装cmakehttps://cmake.org/download/根据系统选择安装的cmake版本,我这里选择的是64位版本安装。1 编译protocol解压刚才下载的protobuf包,打开cmake按图...转载 2018-10-11 11:48:06 · 4491 阅读 · 0 评论 -
c++ 位操作实现数据标志位获取与更新
#include "stdafx.h"#include using namespace std;int get_state(int& value,int index) { if((1<< (index)) & value) { return 1; } else { return 0; } }void set_state(int& value,原创 2014-09-16 17:31:46 · 3208 阅读 · 0 评论 -
模板
转载http://www.cnblogs.com/CaiNiaoZJ/archive/2011/08/15/2138705.html有以下这样3个求加法的函数: 1 int Add(int x,int y) 2 { 3 return x+y; 4 } 5 6 double Add(double x,double y) 7 { 8 return x+y; 9 }10 11转载 2014-07-14 13:59:29 · 483 阅读 · 0 评论 -
c++ 位操作
// bit_opt.cpp : 定义控制台应用程序的入口点。///************************************************************************//*author:郑金玮time:2014/07/14desc:impl bit set and clear test demo*//******************原创 2014-07-14 13:50:24 · 541 阅读 · 0 评论 -
模板设计策略
看了一下《c++ 设计新思维》 按照上面的例子敲了几行代码,原创 2014-07-31 11:30:28 · 638 阅读 · 0 评论 -
c语言设置控制台背景色和前景色
你是不是讨厌了控制台程序窗口的黑底白字?其实要想改变一下也很容易。 首先请你运行一下这个程序: #include int main() { system( "color 3A "); system( "pause "); return 0; } 看到不是黑底白字了吧。 解释一下 color后面 3是背景色代号 A是前景色代号,你可以根据这些代号自由改变原创 2014-06-23 11:36:08 · 9806 阅读 · 2 评论 -
禁用 copy & assign
#define DISALLOW_COPY_ASSIGN(TypeName) \ TypeName(const TypeName&); \ void operator =(const TypeName&)原创 2014-05-22 15:11:15 · 609 阅读 · 0 评论 -
c++ 封装定时器
Thread.h#pragma once#include #include #include #include using namespace std;class CThread{public: CThread(); virtual ~CThread(); HANDLE getHandle() const; bool wait(); bool wait(DWOR原创 2014-07-18 18:57:13 · 2726 阅读 · 0 评论 -
union 内幕
union主要是共享内存,分配内存以其最大的结构或对象为大小,即sizeof最大的。在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。一下转载自网站:在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要转载 2014-07-09 19:18:45 · 507 阅读 · 0 评论 -
c语言实现多态
转载自:http://www.cnblogs.com/haippy/archive/2012/12/31/2840501.html上面一篇博客中写了《如何实现 C 的函数重载》,本文将进一步讲讲如何实现 C 语言的继承和多态,其实大致的思想已经在前面的一篇博客《200 行 C 代码实现插件式 NOSQL 存储服务器(一)》中体现过了,主要就是如何灵活运用C的函数指针这一特性转载 2014-07-28 16:35:57 · 12562 阅读 · 7 评论 -
c++训练营--内联函数,c++类型转换,模板,异常捕获
// demo3.cpp : 定义控制台应用程序的入口点。//通过此例程了解内联函数,c++类型转换,模板,异常捕获#include "stdafx.h"#include #include using namespace std;templateclass CTest{public: T GetMax(T a,T b); T Div(T a,T b);原创 2013-09-11 20:41:16 · 896 阅读 · 0 评论 -
各种字符串哈希函数
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函数,我对其进转载 2014-07-17 11:19:24 · 641 阅读 · 0 评论 -
c++ explicit 关键字
explicit用来防止由构造函数定义的隐式转换。 转载自:要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。例如: class things{ public: things(const std::string&name =""): m_name(name),转载 2014-04-17 11:53:25 · 517 阅读 · 0 评论 -
单例模板
template class CSingleton{public: CSingleton(void) {} ~CSingleton(void) {} static Object* instance(void); static Object& instance_reference(void); static void instance_cleanup(void转载 2014-05-04 11:26:16 · 591 阅读 · 0 评论 -
c++ 位操作
转载 2014-04-15 17:12:29 · 561 阅读 · 0 评论 -
c++ 弹性数组
C99中结构中的最后一个元素是未知大小的数组称为灵活数据结构成员,但是结构中的灵活数组成员前面必须至少有一个其它成员.灵活数组成员也许结构中包含一个可变大小的数组.这种结构的sizeof返回大小不包含灵活数组的内存.包含灵活数组成员的结构使用malloc进行内存动态分配,并且分配的内存应该大于结构的大小,以适应灵活数组的预期大小. - 摘自《C语言大全》一个使用灵活数组的示例如下:#inc转载 2014-04-16 11:15:36 · 1395 阅读 · 0 评论 -
c++ 位域
位域 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C/C++语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进制位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样转载 2014-04-16 11:06:50 · 628 阅读 · 0 评论 -
#pragma pack
通过#pragma pack(n)改变C编译器的字节对齐方式在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。转载 2014-04-16 11:19:02 · 518 阅读 · 0 评论 -
C++类型转换
关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。转载 2013-05-30 20:48:26 · 490 阅读 · 0 评论 -
重点---堆和栈
我们经常在c++看见“堆栈”,那么我们有没有这样的疑问:“堆和栈能分开吗?”。其实,可以这样说,在某种程度上说,堆是堆,栈是栈,他们是两种不同的存储机制。下面简要了解。 栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。 堆:是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个del原创 2013-05-23 21:34:58 · 610 阅读 · 0 评论 -
重新认识c++
c语言如此高效,就连某些操作系统都用c来实现,为什们会诞生C++,我想,如果c++没有比c出色的地方,那么c++的出现就没有任何意义了,自从c++诞生起,一直红红火火,所以,在现在众多语言繁杂的世界里,我们要坚信c++绝对有其值得信赖的地方。c++是在c的基础上发展而来的,而c是面向过程的,所以,c++是并不是纯面向的对象的语言,是基于对象的,并不要因此而忽略c++的超强性能,而正因为是基于对原创 2013-05-23 15:11:47 · 630 阅读 · 0 评论 -
c++const关键字
c++提供了const关键字,对于程序员来说,简直就是利器,消除了很多情况下产生的代码编译或链接异常。 以下是转载内容,原版权归原作者所有 一、关于一般常量声明或定义的格式如下:const = ; [1] const = ; [2][1]和[2]的定义是完全等价的。例如:整形int(或其他内置类型:float,double,char)const i转载 2013-05-07 17:27:44 · 1047 阅读 · 0 评论 -
c++ 封装 mutex
本文目的:用C++和Windows的互斥对象(Mutex)来实现线程同步锁。准备知识:1,内核对象互斥体(Mutex)的工作机理,WaitForSingleObject函数的用法,这些可以从MSDN获取详情; 2,当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了转载 2014-04-17 14:34:48 · 1049 阅读 · 0 评论 -
C 读取ini文件
在Windows下可以用GetPrivateProfileString或GetPrivateProfileInt方便读取.ini配置文件内容,但是在Linux平台上就一筹莫展了。为了解决该问题,打算用C来读取.ini,即可不受平台的限制了。[cpp] view plaincopyprint?#define CONF_FILE_PATH "Config.ini"#in转载 2014-04-17 14:41:35 · 1803 阅读 · 0 评论 -
c/c++ 64位整形
在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf("%lld",a),printf("%I64d",a),和cout 本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分转载 2014-07-17 11:11:31 · 731 阅读 · 0 评论 -
c++训练营--重载
// demo1.cpp : 定义控制台应用程序的入口点。//通过此例程了解重载#include "stdafx.h"#include using namespace std; class CMath{public: CMath(float a):m_a(a) { } ~CMath() { } double Add(doubl原创 2013-09-11 19:56:02 · 1060 阅读 · 0 评论