![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
thread
constCpp
会写代码的莫扎特
展开
-
C++内存池(附源码)
C++内存池 (附源码)原创 2018-05-13 16:24:24 · 5229 阅读 · 2 评论 -
C++智能指针实现
上一篇介绍内存池的文章中提到一个基于内存池的智能指针。C++没有GC机制,需要程序员自己管理内存,而智能指针则是C++程序员管理内存的利器。智能指针的原理早已广为人知,通俗来讲就是用类来表示指针(用类来表示对象是OPP思想的核心),成员函数里构建一个指向对象的指针,在构造函数,赋值函数,复制构造函数,析构函数等会改变对象个数的地方增加或减少引用计数,当引用计数为0时,释放指针指向的内存,从而避免了...原创 2018-06-03 11:48:19 · 999 阅读 · 0 评论 -
C++消息队列
在编写多线程程序的时候常用到一种模型叫做 one-loop-per-thread,就是每个线程一个循环来处理逻辑,这就需要一个消息队列来支持线程间消息的投递。封装好的线程模型只需要在消息进出和访问公共数据的时候进行加锁保护,其他情况下不需要加锁,从而最大程度的较少锁的碰撞,这也是one-loop-per-thread的优点之一。 这里我通过C++11的互斥量和条件变量实现了一个消息队列。先把源码...原创 2018-06-03 14:54:16 · 5790 阅读 · 1 评论 -
C++线程模型 one-loop-per-thread
C++11引入了线程对象,使我们能够在语言层面方便的执行线程操作,能够将成员函数,函数对象,lambda函数都当作线程入口,从而不用再去在不同平台上对系统API去做一些生硬的兼容措施(比如将类指针当作线程参数传入到线程函数中从而能够访问类成员)。在这里,我对C++11的线程对象进行简单的封装,实现的简单的线程操作,接着辅助于上一篇提到的消息队列,实现了支持消息转发的线程模型。首先看下简单线程模型的...原创 2018-06-03 15:38:02 · 7575 阅读 · 0 评论 -
日志模型
上一篇中我们将C++11的线程做了简单的封装,再加上消息队列组成了一个带有消息循环的线程模型。这篇中我们通过继承上一篇说的类,来实现一个服务器程序常用的组件,日志模块。不论是服务器程序还是客户端程序,详细的日志输出都是定位问题的有利工具,一个好的日志模块对服务器程序来说尤为重要,我们需要在书写日志的时候保证不影响或者最小的影响服务器的性能。这里我通过建立一个新的线程来书写日志,用内存池来管理投递消...原创 2018-06-03 16:22:52 · 816 阅读 · 0 评论 -
C++时间管理
在编写程序的时候我们经常需要获取系统当前的时间,在之后我们免不了与系统API打交道。C++11添加了一个时间管理模块,从而使我们能够从语言层面获取到系统时间(C++11引入的东西确实方便了很多)。这里我们对其进行简单的封装,能够有效的获取系统当前的时间:#ifndef HEADER_CTIME#define HEADER_CTIME#include <mutex>cl...原创 2018-06-03 16:36:51 · 880 阅读 · 0 评论