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并 ...
随机推荐
- 下载数据到csv中(乱码),使用numpy , pandas读取失败 解决方案
读取数据,下载数据到 csv 文件中 allUniv 列表类型[[...],[...]] 字符集编码使用 utf-8-sig with open('文件名.csv','w',newline='',en ...
- Python os.renames() 方法
概述 os.renames() 方法用于递归重命名目录或文件.类似rename().高佣联盟 www.cgewang.com 语法 renames()方法语法格式如下: os.renames(old, ...
- Python os.closerange() 方法
概述 os.closerange() 方法用于关闭所有文件描述符 fd,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略.高佣联盟 www.cgewang.com 语法 clo ...
- PHP is_infinite() 函数
------------恢复内容开始------------ 实例 判断一个值是否为无限值: <?php echo is_infinite(2) . "<br>" ...
- ajax模拟表单提交,后台使用npoi实现导入操作 方式二
页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ...
- 2019 HL SC day4
自闭场本来 以为 顶多一些不太会 结果发现 一堆不太会 . 树状数组 感觉 好久没看 了有点遗忘 不过还好 现在我来了.莅临之神将会消灭一切知识点哦. 今天说点不一样东西 树状数组 hh 很有用的东 ...
- fiddler本地调试
参考:https://blog.csdn.net/letasian/article/details/75021656 有关fiddler基础用法的介绍详见我的上一篇博客:http://www.cnbl ...
- Android 给服务器发送网络请求
今天听得有点蒙,因为服务器的问题,这边建立服务器的话,学长用的是Idea建立的Spring之类的方法去搞服务器. 然后就是用Android去给这个服务器发送请求,大致效果还是懂的,就是像网站发送请求, ...
- 010_go语言中的maps映射(字典)
代码演示 package main import "fmt" func main() { m := make(map[string]int) m["k1"] = ...
- 用Java制作斗地主
首先,按照斗地主规则,完成洗牌发牌的动作.如图: 具体规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 4. 查看三人各 ...