using C++ 11 ,vs2017 记录开发实战中常用的一些开发知识和库的使用。
-
chronoStudy.h show how to get microsecond/millisecond/second/date/time based on chrono lib. 关于时间处理。
-
exceptionStudy.h shows how to use try-catch.
-
libeventHello.h shows the compiled libevent.dll is in the directory : ../VS2017Project/Practice/libevent/lib32 or ../VS2017Project/Practice/libevent/lib64 how to compile
-
NetBigEndStudy.h shows how to deal with bigEnd and smallEnd between computer and network.
-
libeventEvbufferStudy.h shows how to construct a tcp-server which can accept\read\write with tcp-client using libevent.lib. Evbuffer is just like java.nio.BufferByte.网络通信框架。
-
Thread_condition_variable.h shows how to construct a class contains multi-Thread and how to use the notfiy/wait/unique_lock/lock_guard. 多线程之间的同步。
-
NLOHMANN_JSON.h is a famous json lib whose author is NLOHMANN.
-
JSONStudy.h show how to use json based on NLOHMANN_JSON.h. And how to use NLOHMANN_JSON to serial the object to json.
-
effective c++ 是当做《effective c++》读书笔记,结合工作中会用到的,做了记录,不会用到的,可能只是记个规则。同时里面也补充了《more effective c++》中的一些规则。
-
libEventProxy.h 简单封装了
libevent为一个server类来使用,简化了使用方式,如下。
ServerLib server;
server.startByNewThread();- libEventProxy.h 封装了一个基于
socket的client类。
ClientLib client;
client.SocketStart();-
STLMap.h 使用map、undered_map,以及priority_queue。
-
STLVector.h 使用
vector,以及内存地址变化。 -
logger.h 一个自己开发的简约日志库,实现了设置日志级别,以及线程安全记录。只要引用这个头文件,就可以使用,非常简单。但是实际当中线程安全还是有问题。
GGWlogger mylogger("testfile");
mylogger.SetLevel(LOGLEVEL::LOG_DEBUG);
mylogger.WriteLog( "hhhhhhh", LOGLEVEL::LOG_INFO);
mylogger.LogInfo("hhhhhhh");
mylogger.WriteLog("hhhhhhh");
-
xmlStudy.h 如何使用
tinyxml2库进行xml文件的读写使用。 -
Cpp11_Function_Study.h 介绍了C++11中引入的Function,相当于是以前C语言中的函数指针,但是可以封装很好,可以分装各种函数。 也介绍了右值引用&&,这个也是C++11中新引入的机制,对于提升内存使用效率很有用。 新增了bind的使用方式,这样就可以使用同一个function,来对应参数相同,返回值相同的不同普通函数,不同类对象,以及不同类成员函数,从而可以实现多种映射方式。简直很棒。
-
ThreadsWaitNotifyManager.h 用于多线程之间通信的一个类。
-
libeventTimerStudy.h 定时器的使用,基于libevent中的定时器进行了封装,使用时候只要创建Timer类的SetTimer做初始化,调用addTimer方法添加定时器以及方法的回调。 在使用多线程时,一定要有下面这条语句,否则多线程环境里面,定时器的时间是不准的。evthread_use_windows_threads(),我个人台式机上,多线程,定时设置300毫秒,基本误差20毫秒以内,定时设置900毫秒,误差还是20毫秒以内。
-
glog日志工程,基于32和64的vs2017工程解决方案工程
使用了union结构,模拟实现了事件加入到事件队列以及被消费的过程,使用的是一个队列。union最好使用基本的struct结构,不要涉及到指针等类。
-
STL的一些杂笔记示例
-
事件驱动的线程安全的消息分发中心示例EventsCenter示例,也可以参考另外一个项目EventsCenter,专门将该功能分离出来了。
-
string和int、double等类型之间的转换示例
-
const的各种用法示例
-
priority_queue的使用示例 示例
-
虚函数\虚基类\纯虚函数(抽象类)的使用示例,继承 示例
-
STL的 pair和for_each的自定义处理函数的使用 示例 STLPairStudy
-
STL的sort和stable_sort,nth_element算法,自定义类和自定义比较方法 [示例SortStudy] (./VS2017Project/Practice/STLAlgorithm.h)
-
STL的find_if,search,binary_search,equal_range,lower_bound 算法 [示例FindStudy] (./VS2017Project/Practice/STLAlgorithm.h)
-
STL的copy 算法 [示例CopyStudy] (./VS2017Project/Practice/STLAlgorithm.h)
-
运算符重载 示例
-
数据结构中的查询算法示例
-
RSA加密使用crypto820版本的库的使用 示例
-
设置windows的控制台程序的版本号显示:项目->添加->资源->Version,然后双击打开VS_VERSION_INFO文件(可以通过资源视图 Ctrl+Shift+E 查看)
-
文件夹的创建 示例
-
表驱动的编程方式,有效减少if else,聚集代码逻辑。示例
-
windows下的socket,以及int类型的大端序和小端序处理,示例
-
代码方式,线程绑定cpu 示例
-
enum class 示例
-
thread_local 作用和java中的ThreadLocal一样。 示例
-
概率随机数 示例
-
type_traits技术 用于判断是什么类型,是否位指针、引用等等。 示例
-
线程池的实现,融合了vector、queue、thread、future、functional、mutex、condition_variable、std::result_of众多c++11中新添加的元素。 示例
-
udp socket 示例
-
windows下hiredis库的使用,比较麻烦,需要下载windows下的redis源码(github上有),然后编译生成对应的静态库,引入很多对应头文件,才能在自己的项目中使用。 示例
-
windows下对hiredis库的进一步封装,我叫他为GugwHiredis库,该库把繁琐的hiredis的配置引用封装起来,对外,只提供一个头文件和一个对应的lib和dll,就可以使用hiredis库的功能。使得使用起来简单明了。 示例
-
GugwHiredisTest是对GugwHiredis的使用示例,非常简单。 示例
-
一个开源的网络库,自己手抄了一份windows下的代码。 示例
-
模板元编程基础 示例
-
placement new的使用。 示例
-
命令行解析库cmdline的使用,对cmdline稍有更改。 示例
-
一个简单的对象池示例。 示例
-
关于编译器字节对齐的使用,用于简化网络协议开发时候很有用。 示例
-
VS2017DLLSolution 里面是有建立托管和非托管dll的示例。
-
VS2017DLLClassExport 是介绍如何导出类的方法, 分为两种,第一种直接导出实现类,头文件包含类中所有的方法声明。 第二种导出虚类接口,头文件只包含接口不包含实现类的声明。 2019-4-16 新增,线程通信类的自定义开发的库。
-
Pimpl的使用,这个在effective C++中应该也提到。实例autoTimer.h
-
发布和订阅的完整示例
-
模板的使用,显式和隐式定义。 示例
-
Mysql的传统的API使用,支持mysql8.0,当然mysql8.0有全新的支持面向对象的api,这里没有使用。
- linux相关的示例代码,包括动态库、静态库、cmake、make、系统调用等。 示例