muduo库学习笔记二:base库之timestamp

一、类功能:时间戳类,主要提供基础的时间值获取、计算功能

类图:

muduo库学习笔记二:base库之timestamp_第1张图片

常量

  • kMicroSecondsPerSecond表示每秒所对应的微秒数

成员变量

  • microSecondsSinceEpoch_表示到1970-01-01 00:00:00 UTC的微秒数

成员函数

  • swap()交换操作
  • toString()、toFormattedString()将时间转换为string类型或指定格式,
  • valid()判断Timestamp是否有效,
  • invalid()返回一个无效的Timestamp,
  • now()返回当前时间的Timestamp,
  • secondsSinceEpoch()/microSecondsSinceEpoch()返回到1970-01-01 00:00:00 UTC的秒数/微秒数。

二、主要知识点:

  • BOOST_STATIC_ASSERT//编译时断言,让错误发生在编译时,(assert是运行时断言)
  • muduo::copyable//空基类,标识该类是可拷贝的值类型,拷贝之后与原对象脱离关系,深拷贝(c++内置类型都是深拷贝)声明周期便于管理。(对象语义,要么不能拷贝,要么可以拷贝,但是拷贝之后与原对象共享底层资源,声明周期管理一般通过智能指针进行)
  • boost::less_than_comparable<>//继承模板类,要求实现<,可自动实现>,<=,>=
  • PRId64:int64_t用来表示64位整数,在32位系统中是long long int,在64位系统中是long int,所以打印int64_t的格式化方法是:

printf(“%ld”, value);  // 64bit OS

printf("%lld", value); // 32bit OS

跨平台的做法:
#define __STDC_FORMAT_MACROS
#include //在该头文件中定义了PRI64
#undef __STDC_FORMAT_MACROS 
printf("%" PRId64 "\n", value);

三、测试程序:

首先,将base库目录下的Timestamp.h、Timestamp.cc、Types.h拷贝到自己新建的目录下,同时拷贝编译脚本和CMakeLists

整个目录结构为:

muduo库学习笔记二:base库之timestamp_第2张图片

经过编译,我们可以生成一个静态库libmuduo_base.a

接下来,拷贝Timestamp_unittest.cc,(功能-获取当前时间;计算时间差)重新编译

muduo库学习笔记二:base库之timestamp_第3张图片

验证timestamp类功能,在build/debug/bin下运行timestamp_unittest

muduo库学习笔记二:base库之timestamp_第4张图片

接下来,来实战编译时断言,在base下新建bsa.cc

muduo库学习笔记二:base库之timestamp_第5张图片

内容为:

muduo库学习笔记二:base库之timestamp_第6张图片

进行编译,即可以在编译时观察到断言错误。

 

 

你可能感兴趣的:(moduo源码阅读笔记)