muduo源码解析1-timestamp类
timestamp
class timestamp:public mymuduo::copyable,
public boost::equality_comparable<timestamp>,
public boost::less_than_comparable<timestamp>
{
};
作用:
主要是实现了时间戳的相关操作,例如时间戳的格式化,返回当前时间戳等等。
成员变量:
private:
int64_t m_microSeconds;//数据成员,表示时间戳的微秒数
public:
static const int microSecInSec=*;//1秒=1000*1000微妙
成员函数:
timestamp():m_microSeconds();
//构造函数,设置mircroseconds值
explicit timestamp(int64_t ms):m_microSeconds(ms);
//交换两个timestamp对象的值
void swap(timestamp& that);
//用std::string形式返回,格式[millisec].[microsec]
string toString() const;
//格式, "%4d年%02d月%02d日 星期%d %02d:%02d:%02d.%06d",时分秒.微秒
string toFormattedString(bool ifShowMicroSec=true) const;
//判断当前时间错是否合法,即是否>0
bool valid() const;
//返回当前时间戳的微妙
int64_t microSecSinceEpoch() const;
//返回当前时间戳的秒数
time_t secSinceEpoch() const;
//返回当前时间所在的时间戳
static timestamp now();
static timestamp invalid();
//返回time_t所在的时间戳
static timestamp fromUnixTime(time_t t);
//返回time_t以microsec为偏移所在的时间戳
static timestamp fromUnixTime(time_t t,int microsec);
类外相关函数:
应当注意timestamp继承了boost等于和小于类,为了实现timestamp的比较操作符,应当重载timestamp的<和==操作符。
//继承了boost的比较类,需要自己实现<和==操作符的重载
inline bool operator<(timestamp l,timestamp r)
{
return l.microSecSinceEpoch()<r.microSecSinceEpoch();
}
inline bool operator==(timestamp l,timestamp r)
{
return l.microSecSinceEpoch()==r.microSecSinceEpoch();
} //返回两个时间戳的差,用秒的形式返回
inline double timeDifference(timestamp high,timestamp low)
{
int64_t diff=high.microSecSinceEpoch()-low.microSecSinceEpoch();
return static_cast<double>(diff/timestamp::microSecInSec);
} //返回一个时间戳加上给定秒数的新的时间戳
inline timestamp addTime(timestamp ts,double sec)
{
int64_t microsec=ts.microSecSinceEpoch()+
static_cast<int64_t>(sec)*timestamp::microSecInSec;
return timestamp(microsec);
}
muduo源码解析1-timestamp类的更多相关文章
- muduo源码解析5-mutex相关类
mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: ...
- Mybatis源码解析3——核心类SqlSessionFactory,看完我悟了
这是昨晚的武汉,晚上九点钟拍的,疫情又一次来袭,曾经熙熙攘攘的夜市也变得冷冷清清,但比前几周要好很多了.希望大家都能保护好自己,保护好身边的人,生活不可能像你想象的那么好,但也不会像你想象的那么糟. ...
- AOP源码解析:AspectJAwareAdvisorAutoProxyCreator类的介绍
AspectJAwareAdvisorAutoProxyCreator 的类图 上图中一些 类/接口 的介绍: AspectJAwareAdvisorAutoProxyCreator : 公开了Asp ...
- muduo源码解析11-logger类
logger: class logger { }; 在说这个logger类之前,先看1个关键的内部类 Impl private: //logger内部数据实现类Impl,内部含有以下成员变量 //时间 ...
- muduo源码解析10-logstream类
FixedBuffer和logstream class FixedBuffer:noncopyable { }: class logstream:noncopyable { }: 先说一下包含的头文件 ...
- Netty源码解析 -- 内存对齐类SizeClasses
在学习Netty内存池之前,我们先了解一下Netty的内存对齐类SizeClasses,它为Netty内存池中的内存块提供大小对齐,索引计算等服务方法. 源码分析基于Netty 4.1.52 Nett ...
- AOP源码解析:AspectJExpressionPointcutAdvisor类
先看看 AspectJExpressionPointcutAdvisor 的类图 再了解一下切点(Pointcut)表达式,它指定触发advice的方法,可以精确到返回参数,参数类型,方法名 1 pa ...
- java源码解析之Object类
一.Object类概述 Object类是java中类层次的根,是所有类的基类.在编译时会自动导入.Object中的方法如下: 二.方法详解 Object的方法可以分成两类,一类是被关键字fin ...
- Bulma 源码解析之 .columns 类
{说明} 这一部分的源码内容被我简化了,另外我还额外添加了一个辅助类 is-grow. .columns // 修饰类 &.is-centered justify-content: cente ...
- java源码解析之String类(二)
上一节主要介绍了String类的一些构造方法,主要分为四类 无参构造器:String(),创建一个空字符串"",区别于null字符串,""已经初始化,null并 ...
随机推荐
- vue同时安装element ui跟 vant
记一个卡了我比较久的问题,之前弄的心态爆炸各种问题. 现在来记录一下,首先我vant是已经安装成功了的. 然后引入element ui npm i element-ui -S 接着按需引入,安装插件 ...
- 从包含10个无符号数的字节数组array中选出最小的一个数存于变量MIN中,并将该数以十进制形式显示出来。
问题 从包含10个无符号数的字节数组array中选出最小的一个数存于变量MIN中,并将该数以十进制形式显示出来. 代码 data segment arrey db 0,1,2,4,6,5,7,9,8, ...
- PHP md5_file() 函数
实例 计算文本文件 "test.txt" 的 MD5 散列: <?php高佣联盟 www.cgewang.com$filename = "test.txt" ...
- hibernate数据库连接池,常用配置
<!-- 最大连接数 --> <property name="hibernate.c3p0.max_size">20</property> &l ...
- Spring 注解学习 详细代码示例
学习Sping注解,编写示例,最终整理成文章.如有错误,请指出. 该文章主要是针对新手的简单使用示例,讲述如何使用该注释,没有过多的原理解析. 已整理的注解请看右侧目录.写的示例代码也会在结尾附出. ...
- Linux操作系统 可插拔认证模块PAM(3)
六.Linux 操作系统安全登陆设计 自己编写PAM 模块并编译成动态链接库so 文件,将其添加进/etc/pam.d/login 文件中实现命令行安全登陆设计,将其添加进/etc/pam.d/lig ...
- C++虚函数相关内容
样例代码 class Base{public: Base(){}; virtual ~Base(){ //若没有设置为虚函数:如果有这样的指针Base *p=new Derived();声明,则 ...
- 一文搞定Python正则表达式
本文对正则表达式和 Python 中的 re 模块进行详细讲解 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知 ...
- PYTHON实战完整教程1-配置VSCode开发环境
一.安装 为降低学习门槛,保证学习目标的聚焦,我们在windows(使用WinServer2019虚拟机)上搭建开发环境.(系列教程最后结束时,也会部署到linux上) 打开Python官网 http ...
- axios的post请求返回状态码400
设置拦截 axios.interceptors.request.use((config) => { if (config.method === 'post') { if (!config.isF ...