- 博客(34)
- 收藏
- 关注
原创 c++11实现的一个消息总线框架
最近在看C++11的特性,然后按照网上的例子实现了一个消息总线框架。https://github.com/hejiajie1989/MessageBus项目里README文档里有详细的设计说明,使用的时候 g++ test.cpp -o test -std=c++11 g++ TestMessageBus.cpp -o TestMessageBus -std=c++11
2017-07-17 11:49:59
3474
1
原创 C++11新特性--线程库相关
线程的创建std::thread t() 提供线程函数或者函数对象 t.join() 阻塞线程直到线程函数执行完毕 t.detach() 如果不希望线程被阻塞执行就调用detach(),但是这会导致线程和线程对象分离。std::thread创建的线程在出了作用域之后会被析构,如果这时候线程函数还没有执行完的话就会发生错误。线程不能复制,但是可以移动std::thread t(func);st
2017-07-07 08:44:37
671
原创 深入探索C++对象模型之七 --- 站在对象模型的尖端
深入探索C++对象模型之七 — 站在对象模型的尖端template instantiation 模版具现化 template、exception handling和runtime type idetificationTemplate模版只是定义了函数tempalte的声明当我们声明template的时候,编译器对于声明代码是不做任何处理的,只有在程序中使用到了具体类型的类或者函数的时候,编译器才会
2017-06-12 21:42:24
451
原创 深入探索C++对象模型之五 --- 析构、构造、拷贝语意学
深入探索C++对象模型之五 — 析构、构造、拷贝语意学一般而言,class的data member应该被初始化,并且只在constructor中或是在class的其它member functions中指定初值,其它任何操作都将破坏封装性质,使class的维护和修改更加困难。纯虚函数我们可以定义和调用一个pure virtual function:不过它只能被静态的调用,不能经由虚拟机制调用。而对于p
2017-06-06 01:36:16
672
原创 IO多路复用之epoll
IO多路复用之epoll总结基本概念相对于之前介绍的select和poll, epoll更加的灵活而且没有描述符数量的限制。epoll使用一个文件描述符管理多个描述符,将用户关心的文件描述符以及事件存放到内核的一个事件表中,这样在用户空间和内核空间只需要copy一次。epoll接口int epoll_create(int size);int epoll_ctl(int epollfd, int o
2017-06-05 15:08:56
468
原创 Muduo之Channel源码解析
Muduo之Channel源码解析前面我们分析了Acceptor处理连接请求,之后创建TcpConnection对象分发给合适的EventLoop,而TcpConnection里面是包含Channel,EventLoop以及相应的socket fd的,我们就可以假想成TcpConnection是针对一个连接的所有东西(socket,回调函数等)。但是对于socket的事件监听最后是需要装载到Pool
2017-05-08 12:25:01
726
原创 设计模式之8 -- 适配器模式
适配器模式 学习笔记有时候我们需要现有的类,但是此类的接口不符合系统的需要,即接口不兼容。那么我们就需要引入适配器类来使得我们目标接口和原来的类接口兼容。适配器模式定义: 将一个接口转换成客户希望的另一个接口,使得接口不兼容的那些类可以一起工作,其别名为包装器(wrapper)。 适配器模式可以作为类结构型模式,也可以作为对象结构型模式适配器模式一共有两种情况。一种是类适配器,还有一种是对象适配器。
2017-05-04 23:25:56
411
原创 设计模式之5 -- 原型模式
原型模式学习笔记通过一个原型对象克隆出多个一模一样的对象,该模式称之为原型模式。定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。通过克隆所创建的对象是全新的对象,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法实现。原型模式结构图 如下图所示:在原型模式中包含如下几个角色:抽象原型类,声明克隆方法的接口,是所有具体原型类的公共父类。具体原型类
2017-05-04 23:23:41
384
原创 TCP/IP协议--IP层ip_local_deliver实现
上一节说到当判断该数据报文是发送给本机的话那么就会直接到ip_local_deliver()进行处理ip_local_deliver对于收到的IP报文需要传递给更上层的协议去处理,但是如果收到的是IP分片的那么就需要在往上层传递之前先进行重组,这些就是在ip_local_deliver()函数里面进行的。我们看下代码:/* * Deliver IP Packets to the higher p
2017-04-25 20:25:54
3552
原创 Linux网络编程之I/O复用
Linux编程之IO多路复用(I/O Multiplexing)程序设计过程中有时候会对多个输入进行操作,例如标准输入或者多个socket。那么如果在对某个进行处理的时候阻塞住的话,另外的输入进来的话会得不到及时的处理。(比如客户端程序调用fgets/cin的时候会阻塞在标准输入的地方,此时如果有监听的socket请求连接的话是得不到及时处理的)。对于这种情况就需要当内核发现我们指定的IO
2017-04-24 01:02:38
2409
原创 设计模式之13--享元模式
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2017-04-19 00:11:47
606
原创 第七章 函数
1. 函数不能返回另一个函数或者内置数组类型,但是可以返回指向函数的指针,或指向数组元素的指针int *foo_bar() {/*....*/}2. 函数必须指定返回类型,至少也要void3. c++是一种静态强类型语言,每一次函数调用,编译时都会检查实参。4.如果形参具有非引用类型,则复制实参的值,对形参的修改不会影响实参的值,非引用形参就如何实参的局部副本;
2015-07-02 20:38:10
401
原创 第六章 语句
1. 在所有用过的类类型中,IO类型可以用作条件,但vector类型和string类型一般不可用作条件。2. 对于悬垂else语句,会普遍存在潜在的二义性,解决方法是通过将悬垂的else语句匹配给最后出现的尚未匹配的if子句。3. 在switch语句中,程序不是只会执行匹配的case标号关联语句。实际上,程序会从该点开始执行,并跨越case边界继续执行其他语句,直到swit
2015-06-30 21:10:17
420
原创 第十章 名字控制
在C和C++中,static都有两种基本的含义。1)在固定的地址上进行存储分配。也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的。这也是静态存储的概念。2)对一个特定的编译单位来说是局部的。这样,static控制名字的可见性,所以这个名字在这个单元或者类之外是不可见的。C和c++都允许在函数内部定义一个static对象,这个对象将存储在程序的静态
2014-11-16 23:06:42
594
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人