zoukankan      html  css  js  c++  java
  • Muduo阅读笔记--base(二)

    上一篇文章对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文件的阅读; 

  • 相关阅读:
    go 字符串转换
    GRU模型结构
    ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解
    H5可视化编辑器(H5 Dooring)
    (转)如何防止Axios对我的请求参数进行编码?
    vue使用element-ui,如何给Label加标签
    vue中$router.push打开新窗口
    (转)webstorm配置svn
    打开gitee.com网站报错
    监控$route无效
  • 原文地址:https://www.cnblogs.com/LCCRNblog/p/5669721.html
Copyright © 2011-2022 走看看