muduo源码学习base——TimeStamp(UTC时间戳)

TimeStamp(UTC时间戳)

  • 前置
  • copyable和noncopyable
  • TimeStamp
    • now()

此博客跟着b站上的:大并发服务器开发(实战)学习做的笔记

前置

值语义、对象语义:

  • 值语义:所谓值语义是一个对象被系统标准的复制方式复制后,与被复制的对象之间毫无关系,可以彼此独立改变互不影响
  • 对象语义:也叫指针语义,引用语义等,通常是指一个对象被系统标准的复制方式复制后,与被复制的对象之间依然共享底层资源,对任何一个的改变都将改变另一个

编译时断言和运行时断言:

  • 静态断言:在编译期对表达式进行判断:static_assert(常量表达式,"提示字符串");
  • 动态断言:运行时断言

关于宏__STDC_FORMAT_MACROS:

  • 需要定义宏__STDC_FORMAT_MACROS后才能包含inttypes.h

copyable和noncopyable

在base文件夹下有两个文件分别定义了两个类(空基类,标识类,值类型)copyable和noncopyable
copyable (派生类都是值语义)

#ifndef MUDUO_BASE_COPYABLE_H
#define MUDUO_BASE_COPYABLE_H
namespace muduo
{
/// A tag class emphasises the objects are copyable.
/// The empty base class optimization applies.
/// Any derived class of copyable should be a value type.
class copyable
{
protected:
 copyable() = default;
 ~copyable() = default;
};
}  // namespace muduo
#endif  // MUDUO_BASE_COPYABLE_H

noncopyable

#ifndef MUDUO_BASE_NONCOPYABLE_H
#define MUDUO_BASE_NONCOPYABLE_H
namespace muduo
{
class noncopyable
{
public:
 noncopyable(const noncopyable&) = delete;
 void operator=(const noncopyable&) = delete;
protected:
 noncopyable() = default;
 ~noncopyable() = default;
};
}  // namespace muduo
#endif  // MUDUO_BASE_NONCOPYABLE_H

TimeStamp

TimeStamp类是copyable,boost::equality_comparable,boost::less_than_comparable的派生类

class Timestamp : public muduo::copyable,
                  public boost::boost::equality_comparable<Timestamp>,
                  public boost::less_than_comparable<Timestamp>

muduo::copyable :

  • 值语义,可以拷贝

boost::equality_comparable :(实现在boost库中operator.hpp中)

  • 派生类TimeStamp提供
    inline bool operator==(Timestamp lhs, Timestamp rhs)
    将自动生成
    inline bool operator!=(Timestamp lhs, Timestamp rhs)

boost::less_than_comparable :(实现在boost库中operator.hpp中)

  • 派生类TimeStamp提供:
    inline bool operator<(Timestamp lhs, Timestamp rhs)
    将自动生成
    inline bool operator>(Timestamp lhs, Timestamp rhs)
    inline bool operator>=(Timestamp lhs, Timestamp rhs)
    inline bool operator<=(Timestamp lhs, Timestamp rhs)

类图:
muduo源码学习base——TimeStamp(UTC时间戳)_第1张图片

  • static const int kMicroSecondsPerSecond = 1000 * 1000 :表示每秒所对应的微秒数一百万
  • int64_t microSecondsSinceEpoch_ :时间戳微秒数,到1970-01-01 00:00:00 UTC的微秒数
  • 构造可以使用时间戳微秒数来构造
  • swap交换函数

now()

Timestamp Timestamp::now()
{
 struct timeval tv;//定义一个时间结构体
 gettimeofday(&tv, NULL);//c库函数(系统函数也有),结构体tv接收
 int64_t seconds = tv.tv_sec;//获取秒
 return Timestamp(seconds * kMicroSecondsPerSecond + tv.tv_usec);//秒*1000000+微秒,返回时间戳
}

函数较简单,略

你可能感兴趣的:(muduo,Learn,服务器)