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

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

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

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

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

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

一、copyable类

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

二、Types类

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

1 template<typename To, typename From>
2 inline To implicit_cast(From const &f);
3 template<typename To, typename From>     // use like this: down_cast<T*>(foo);
4 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文件的阅读;