4-muduo-base-Timestamp

 

1 类说明

  • 功能:

    • 时间戳及对应的功能,以μs微秒为单位

  • 继承:

    • muduo::copyable(空基类,标识类)

      • 标签类,表示可以这是复制的类。(值语义)

    • boost::equality_comparable< Timestamp >

      • 类只要实现对operator==就会自动实现!=

    • boost::less_than_comparable< Timestamp >

      • 继承使用此类可以只重写operator< ,剩下的<= ,>会自动生成

 

2 成员变量说明

  • microSecondsSinceEpoch_

    • 顾名思义,以μs微秒为单位的时间戳,类型为int64_t,1 s = 10^6 μs。这个数值是距离时间纪元1970-01-01 00:00:00的微秒之差。

  • kMicroSecondsPerSecond

    • 静态成员变量,指明一秒有多说微秒

 

3 成员函数说明

1 non-static

  • 构造函数:两个版本,一个是无参数,一个有一个int64_t的值

    • 初始化microSecondsSinceEpoch_

  • swap

    • 交换两个Timestamp

  • toString

    • 转为string

  • toFormattedString

    • 转化为格式化string

  • valid

    • 检查microSecondsSinceEpoch_是否大于0

  • microSecondsSinceEpoch

    • 返回microSecondsSinceEpoch_时间戳的值

  • secondsSinceEpoch,返回类型是time_t也即是long int

    • 转换为秒,microSecondsSinceEpoch_ / kMicroSecondsPerSecond

 

2 static

  • now

    • 利用timeval结构体,获得当前秒数,从而获得微秒数并返回Timestamp类型

  • invalid

    • 返回一个微秒数为0的Timestamp对象

  • fromUnixTime

    • 将Unix时间(time_t)转为Timestamp类型

 

3 inline

  • 重载 < 和 ==

  • timeDifference

    • 返回两个时间戳之差(以秒返回)

  • addTime

    • Timstamp加上传入秒数

 

4 测试

  • 用当前时间构造一个Timestamp对象,转换成字符串并打印

  • 将上面的对象以值传递和引用传递方式传递到函数进行打印

  • 时间衡量:将100个now的Timestamp对象放进vector,计算第一个和最后一个之差的时间。并且计算vector中相邻两个Timestamp对象之差。

 

5 其他

  • static_assert关键字:用来做编译期间的断言。语法:static_assert(常量表达式,提示字符串)。当表达式为true时,什么都不做;当表达式为false,产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提示字符串。

    • PRI64:int64_t用来表示64位整数,在32位系统中是long long int,而在64位系统中是long int,所以在打印int64_t的格式化方法(这种方法不太合适)

      • printf("%ld", value) // 64bit OS

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

    • 跨平台做法:(会自动转换成上面的)

     #ifndef __STDC_FORMAT_MACROS
     #define __STDC_FORMAT_MACROS
     #endif
     
     #include <inttypes.h>
     
     prinf("%" PRId64 \n", value)

    muduo中的:

     snprintf(buf, sizeof(buf), "%" PRId64 ".%06" PRId64 "", seconds, microseconds);
  •  
posted @ 2023-05-01 12:44  DavidJIAN  阅读(39)  评论(0)    收藏  举报