Muduo阅读笔记--base(二)
上一篇文章对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文件的阅读;
- Python新手学习基础之数据类型——数字类型
- linux内存清理命令
- select三个值选中一个值对应一个值
- HDU 4310 Hero
- PHP header函数使用大全
- Lambda架构
- React-Native之Android:原生界面与React界面的相互调用
- 如何通过JAVA客户端访问Hbase
- 0713
- Android基础--------fragment
- Linux基础(11)文本处理三剑客之sed
- Codeforces Round #360 div2
- 搜索结果高亮显示函数
- Wget重定向漏洞(CVE-2016-4971)升级
- PHP获取当前页面的URL
- ORA-01790 错误处理
- Apache 服务启动脚本
- Junit测试工具
- java获取本地的ip地址
- Android SDK更新处理解决方案