上一篇文章对muduo的入门做了介绍。

http://www.cnblogs.com/LCCRNblog/p/5668035.html

  base文件夹下这么多代码,该如何入手呢?对于我这种第一次接触大型项目的小白来说是相当棘手的问题啊,缺乏经验导致无从下手;路虽难但也要继续走啊,先列出base文件夹下的所有文件目录,如下所示:

 \-- base
|-- AsyncLogging.{h,cc} 异步日志 backend
|-- Atomic.h 原子操作与原子整数
|-- BlockingQueue.h 无界阻塞队列(消费者生产者队列)
|-- BoundedBlockingQueue.h 有界阻塞队列
|-- Condition.h 条件变量,与 Mutex 一同使用
|-- copyable.h 一个空基类,用于标识 (tag) 值类型
|-- CountDownLatch.{h,cc} “倒计时门闩”同步
|-- Date.{h,cc} Julian 日期库(即公历)
|-- Exception.{h,cc} 带 stack trace 的异常基类
|-- Logging.{h,cc} 简单的日志,可搭配 AsyncLogging 使用
|-- Mutex.h 互斥器
|-- ProcessInfo.{h,cc} 进程信息
|-- Singleton.h 线程安全的 singleton
|-- StringPiece.h 从 Google 开源代码借用的字符串参数传递类型
|-- tests 测试代码
|-- Thread.{h,cc} 线程对象
|-- ThreadLocal.h 线程局部数据
|-- ThreadLocalSingleton.h 每个线程一个 singleton
|-- ThreadPool.{h,cc} 简单的固定大小线程池
|-- Timestamp.{h,cc} UTC 时间戳
|-- TimeZone.{h,cc} 时区与夏令时
\-- Types.h 基本类型的声明,包括 muduo::string

  面对如此多的文件,可以从多方面入手,比如从第一个文件开始阅读,当引入(#include)其他文件时,调到被引用文件进行阅读,这样一步一步往下将所有的文件串联起来;或者从这样一个文件开始,它引用的其他文件数最少或者没有,这样在阅读该文件的时候,不用调到别的文件中去阅读。

  在此,我将结合两种方法一起使用。

一、copyable类

  这是一个空类。会被用作其他类的基类。正如其名字一样,这个基类是可以被copy的。在《Effective C++》条款6中介绍了如何声明Uncopyable的类。

二、Types类

  目录中描述Types是基本类型的声明,里面包括两个函数,这两个函数的作用目前还不清楚。

 template<typename To, typename From>
inline To implicit_cast(From const &f);
template<typename To, typename From> // use like this: down_cast<T*>(foo);
inline To down_cast(From* f);

三、Date类

  将时间设置为一种叫Gregorian calendar的格式;Date.h文件中有一个定义struct tm;不清楚这一行到底是什么意思,因为没有找到其具体的定义,但又被使用到了。

四、Timestamp类

  该类包含一个64位长的整数表示微秒数,继承了boost::less_than_comparable<Timestamp>这个不知道是什么意思;

五、Timezone类

  没看懂;

六、Exception类

  Exception类继承自标准的std::exception;

七、Singleton

  单例模式。设计模式中单例模式是比较常见的,如果只考虑一般情况,单例模式的实现就比较简单了,如果需要考虑多线程运行时的线程安全问题,则需要通过加锁操作来避免多个线程同时创建该类对象,从而破坏其单例模式。http://www.cnblogs.com/LCCRNblog/p/5671854.html

注意:由于base中的文件太多,逐个阅读导致目的性不强,阅读起来也很乏味。目前看了上面几个,暂时搁置。进入net文件的阅读;

Muduo阅读笔记--base(二)的更多相关文章

  1. Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

    前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一 ...

  2. Linux协议栈代码阅读笔记(二)网络接口的配置

    Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...

  3. Apollo源码阅读笔记(二)

    Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanF ...

  4. [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置

    Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...

  5. 《大象Think in UML》阅读笔记之二

    Think in UML阅读笔记(二) 上一次读到面向对象和面向过程的区别和各自的优势,结合实例分析了面向过程在面对大数据的时候,已经不足以满足人们的需求,所以引入了面向对象,面向对象的方法把世界看做 ...

  6. 【unix网络编程第三版】阅读笔记(二):套接字编程简介

    unp第二章主要将了TCP和UDP的简介,这些在<TCP/IP详解>和<计算机网络>等书中有很多细致的讲解,可以参考本人的这篇博客[计算机网络 第五版]阅读笔记之五:运输层,这 ...

  7. 《梦断代码Dreaming In Code》阅读笔记(二)

    这段时间一口气读了5章,所以想着现在一块写阅读笔记. 在阅读的这段时间,我一直是晚上进行阅读,很多时候都是读完一看已经一个小时了,效果还不错.闲话不表,说说阅读心得. 关于底层语言或是低级语言,我之前 ...

  8. Head First HTML与CSS阅读笔记(二)

    上一篇Head First HTML与CSS阅读笔记(一)中总结了<Head First HTML与CSS>前9章的知识点,本篇则会将剩下的10~15章内容进行总结,具体如下所示. div ...

  9. 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification

    Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...

随机推荐

  1. composer设置忽略版本匹配

    composer install 时遇到错误: Your requirements could not be resolved to an installable set of packages. 原 ...

  2. Bootstrap中的strong和em强调标签

    在Bootstrap中除了使用标签<strong>.<em>等说明正文某些字词.句子的重要性,Bootstrap还定义了一套类名,这里称其为强调类名(类似前面说的“.lead” ...

  3. Azure SQL Database (25) Azure SQL Database创建只读用户

    <Windows Azure Platform 系列文章目录> 本文将介绍如何在Azure SQL Database创建只读用户. 请先按照笔者之前的文章:Azure SQL Databa ...

  4. Linux安装pytorch的具体过程以及其中出现问题的解决办法

    1.安装Anaconda 安装步骤参考了官网的说明:https://docs.anaconda.com/anaconda/install/linux.html 具体步骤如下: 首先,在官网下载地址 h ...

  5. 使用千位分隔符(逗号)表示web网页中的大数字

    做手机端页面我们常常遇到数字,而在Safari浏览器下这些数字会默认显示电话号码,于是我们就用到了补坑的方法加入<meta>标签: <meta name="format-d ...

  6. C++ Primer Plus 6 第一章

    一.机器语言.汇编语言.C\C++.高级语言 机器语言:机器真正识别,能在机器上运行的语言. 汇编语言:低级语言,直接操作硬件,如直接访问cpu寄存器和内存单元.不具有移植性.因为不同的平台对应的硬件 ...

  7. (译)通过 HTML、JS 和 Electron 创建你的第一个桌面应用

    原文:Creating Your First Desktop App With HTML, JS and Electron 作者:Danny Markov 近年来 web 应用变得越来越强大,但是桌面 ...

  8. 如何创建一个Django项目

    Django 软件框架 软件框架是由其中的各个模块组成,每个模块负责特定的功能,模块与模块之间相互协作来完成软件开发. MVC简介 MVC框架的核心思想是:解耦,让不同的代码块之间降低耦合,增强代码的 ...

  9. mui框架移动开发初体验

      前  言 博主最近在接触移动APP,学习了几个小技巧,和大家分享一下. 1. 状态栏设置 现在打开绝大多数APP,状态栏都是与APP一体,不仅美观,而且与整体协调.博主是个中度强迫症患者,顶部那个 ...

  10. JS使用默认图片代替页面上无法显示的图片

    1.js方法: function replaceErrorImg(obj) { obj.src="images/common/error.bmp"; } 2.jquery绑定 $( ...