C++11 std::chrono库详解
所谓的详解只不过是参考www.cplusplus.com的说明整理了一下,因为没发现别人有详细讲解。
chrono是一个time library, 源于boost,现在已经是C++标准。话说今年似乎又要出新标准了,好期待啊!
要使用chrono库,需要#include<chrono>,其所有实现均在std::chrono namespace下。注意标准库里面的每个命名空间代表了一个独立的概念。所以下文中的概念均以命名空间的名字表示! chrono是一个模版库,使用简单,功能强大,只需要理解三个概念:duration、time_point、clock
template <class Rep, class Period = ratio<> > class duration;
template <intmax_t N, intmax_t D = > class ratio;
template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast (const duration<Rep,Period>& dtn);
// duration constructor
#include <iostream>
#include <ratio>
#include <chrono> int main ()
{
typedef std::chrono::duration<int> seconds_type;
typedef std::chrono::duration<int,std::milli> milliseconds_type;
typedef std::chrono::duration<int,std::ratio<*>> hours_type; hours_type h_oneday (); // 24h
seconds_type s_oneday (**); // 86400s
milliseconds_type ms_oneday (s_oneday); // 86400000ms seconds_type s_onehour (*); // 3600s
//hours_type h_onehour (s_onehour); // NOT VALID (type truncates), use:
hours_type h_onehour (std::chrono::duration_cast<hours_type>(s_onehour));
milliseconds_type ms_onehour (s_onehour); // 3600000ms (ok, no type truncation) std::cout << ms_onehour.count() << "ms in 1h" << std::endl; return ;
} duration还有一个成员函数count()返回Rep类型的Period数量,看代码: // duration::count
#include <iostream> // std::cout
#include <chrono> // std::chrono::seconds, std::chrono::milliseconds
// std::chrono::duration_cast int main ()
{
using namespace std::chrono;
// std::chrono::milliseconds is an instatiation of std::chrono::duration:
milliseconds foo (); // 1 second
foo*=; std::cout << "duration (in periods): ";
std::cout << foo.count() << " milliseconds.\n"; std::cout << "duration (in seconds): ";
std::cout << foo.count() * milliseconds::period::num / milliseconds::period::den;
std::cout << " seconds.\n"; return ;
}
template <class Clock, class Duration = typename Clock::duration> class time_point;
// time_point constructors
#include <iostream>
#include <chrono>
#include <ctime> int main ()
{
using namespace std::chrono; system_clock::time_point tp_epoch; // epoch value time_point <system_clock,duration<int>> tp_seconds (duration<int>()); system_clock::time_point tp (tp_seconds); std::cout << "1 second since system_clock epoch = ";
std::cout << tp.time_since_epoch().count();
std::cout << " system_clock periods." << std::endl; // display time_point:
std::time_t tt = system_clock::to_time_t(tp);
std::cout << "time_point tp is: " << ctime(&tt); return ;
}
template <class ToDuration, class Clock, class Duration>
time_point<Clock,ToDuration> time_point_cast (const time_point<Clock,Duration>& tp);
/ time_point_cast
#include <iostream>
#include <ratio>
#include <chrono> int main ()
{
using namespace std::chrono; typedef duration<int,std::ratio<**>> days_type; time_point<system_clock,days_type> today = time_point_cast<days_type>(system_clock::now()); std::cout << today.time_since_epoch().count() << " days since epoch" << std::endl; return ;
}
// system_clock example
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono> int main ()
{
using std::chrono::system_clock; std::chrono::duration<int,std::ratio<**> > one_day (); system_clock::time_point today = system_clock::now();
system_clock::time_point tomorrow = today + one_day; std::time_t tt; tt = system_clock::to_time_t ( today );
std::cout << "today is: " << ctime(&tt); tt = system_clock::to_time_t ( tomorrow );
std::cout << "tomorrow will be: " << ctime(&tt); return ;
}
// steady_clock example
#include <iostream>
#include <ctime>
#include <ratio>
#include <chrono> int main ()
{
using namespace std::chrono; steady_clock::time_point t1 = steady_clock::now(); std::cout << "printing out 1000 stars...\n";
for (int i=; i<; ++i) std::cout << "*";
std::cout << std::endl; steady_clock::time_point t2 = steady_clock::now(); duration<double> time_span = duration_cast<duration<double>>(t2 - t1); std::cout << "It took me " << time_span.count() << " seconds.";
std::cout << std::endl; return ;
}
chrono库还有几个小特性,但是像这种工具库,本着够用则已的态度,就不求全责备了。
C++11 std::chrono库详解的更多相关文章
- std::thread线程库详解(2)
目录 目录 简介 最基本的锁 std::mutex 使用 方法和属性 递归锁 std::recursive_mutex 共享锁 std::shared_mutex (C++17) 带超时的锁 总结 简 ...
- Struts标签库详解【3】
struts2标签库详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri= ...
- STM32固件库详解
STM32固件库详解 emouse原创文章,转载请注明出处http://www.cnblogs.com/emouse/ 应部分网友要求,最新加入固件库以及开发环境使用入门视频教程,同时提供例程模板 ...
- Python爬虫系列-Urllib库详解
Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...
- Lua的协程和协程库详解
我们首先介绍一下什么是协程.然后详细介绍一下coroutine库,然后介绍一下协程的简单用法,最后介绍一下协程的复杂用法. 一.协程是什么? (1)线程 首先复习一下多线程.我们都知道线程——Thre ...
- Python--urllib3库详解1
Python--urllib3库详解1 Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多pyt ...
- MySQL5.6的4个自带库详解
MySQL5.6的4个自带库详解 1.information_schema详细介绍: information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式.什么是元数据呢?元数 ...
- php中的PDO函数库详解
PHP中的PDO函数库详解 PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,P ...
- STM32 HAL库详解 及 手动移植
源: STM32 HAL库详解 及 手动移植
随机推荐
- WinForm相关注意点
1. //this.dgvEmployees.ColumnHeadersDefaultCellStyle.ForeColor = Color.Blue; //dgvEmployees.RowHeade ...
- iOS runtime 的经典作用
- Ajax如何使用Session
在Ajax中有时会使用到Session,在aspx.cs文件这样获取: string name = Session["name"]; 但是在Ajax中就不能这样获取Session, ...
- php curl get post
post有3种. 1.post方式 privatefunction send_post($url,$post_data){ $ch = curl_init($url); curl_setopt($ch ...
- HTML标记语法之列表元素
1.无序列表 <ul> <li type=”项目符号类型”></li> <li type=”项目符号类型”></li> <li typ ...
- c++中有些重载运算符为什么要返回引用
事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...
- INNODB
INNODB,是Mysql5.7的默认存储引擎,是事务安全的,支持ACID,具有提交,回滚和crash-recovery[灾备]能力,以保护用户数据. 优势:一旦Server崩溃,Innodb会自动保 ...
- mysql常用表/视图管理语句
查看所有表 show tables; 查看表/视图结构 desc 表名/视图名: 查看建表过程 show create table 表名: 查看建视图过程 show create view 视图名 ...
- Python内置的HTTP协议服务器SimpleHTTPServer
[root@ok 6FE5-D831]# python -m SimpleHTTPServer 一条命令,HTTP服务就搭起来了!!! 方便朋友下载,自己的文件!!
- JS添加MD5,JS提示框
http://pan.baidu.com/s/1kTmSp9t