Skip to content

ggwhsd/CPPStudy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CPPStudy

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();
   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");
	

使用了union结构,模拟实现了事件加入到事件队列以及被消费的过程,使用的是一个队列。union最好使用基本的struct结构,不要涉及到指针等类。

  • ThreadsWaitNotifyManager.h

  • 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稍有更改。 示例

  • 一个简单的对象池示例。 示例

  • 关于编译器字节对齐的使用,用于简化网络协议开发时候很有用。 示例

DLL

  • VS2017DLLSolution 里面是有建立托管和非托管dll的示例。

  • VS2017DLLClassExport 是介绍如何导出类的方法, 分为两种,第一种直接导出实现类,头文件包含类中所有的方法声明。 第二种导出虚类接口,头文件只包含接口不包含实现类的声明。 2019-4-16 新增,线程通信类的自定义开发的库。

API的设计

  • Pimpl的使用,这个在effective C++中应该也提到。实例autoTimer.h

  • 发布和订阅的完整示例

  • 模板的使用,显式和隐式定义。 示例

  • Mysql的传统的API使用,支持mysql8.0,当然mysql8.0有全新的支持面向对象的api,这里没有使用。

Linux

  • linux相关的示例代码,包括动态库、静态库、cmake、make、系统调用等。 示例

Releases

No releases published

Packages

No packages published