C++11中的chrono库,实现时间相关的功能。

1.duration

duration表示一段时间间隔,原型是:

 template<class Rep, class Period = std::ratio<1>> class duration

Rep是一个数值类型,表示时钟个数,Period表示每个时钟周期的秒数。Period的默认模板参数是std::ratio,它的原型是:

template<std::intmax_t Num, std::intmax_t Denom = 1>
class ratio

Num代表分子,Denom代表分母。ratio<1>代表一个时钟周期是一秒,ratio<60>代表了一分钟,ratio<60*60>代表一个小时,ratio<1, 1000>代表一毫秒,ratio<1, 1000000>代表一微秒,ratio<1, 1000000000>代表一纳秒。

标准库定义了一些常用的时间间隔,如下:

typedef duration <Rep, ratio<3600,1>> hours;
typedef duration <Rep, ratio<60,1>> minutes;
typedef duration <Rep, ratio<1,1>> seconds;
typedef duration <Rep, ratio<1,1000>> milliseconds;          //毫秒
typedef duration <Rep, ratio<1,1000000>> microseconds;       //微秒
typedef duration <Rep, ratio<1,1000000000>> nanoseconds;     //纳秒

实例程序如下:

#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main()
{this_thread::sleep_for(chrono::seconds(3));        //休眠3秒this_thread::sleep_for(chrono::milliseconds(100)); //休眠100毫秒cout << "Hello" << endl;getchar();return 0;
}

2.time_point

time_point表示一个时间点,原型是:

template<class _Clock, class _Duration = typename _Clock::duration>
class time_point

函数time_since_epoch()用来获取1970.1.1以来的时间。下面实例获取当前到1970.1.1有多少小时。

#include <iostream>
#include <chrono>
using namespace std;int main()
{using namespace std::chrono;time_point<system_clock, hours> h = time_point_cast<hours>(system_clock::now());cout << h.time_since_epoch().count() << " hours since epoch" << endl;getchar();return 0;
}

3.clocks

clocks表示当前的系统时钟,内部有time_point, duration, Rep, Period等信息。

clocks包含三种时钟:

  • system_clock:从系统获取的时钟;
  • steady_clock:不能被修改的时钟;
  • high_resolution_clock:高精度时钟

实例测试这些属性

#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;int main() {cout << "system_clock" << endl;cout << system_clock::period::num << endl;cout << system_clock::period::den << endl;cout << "steady = " << boolalpha << system_clock::is_steady << endl;cout << "------------------------------ " << endl;cout << "high_resolution_clock" << endl;cout << high_resolution_clock::period::num << endl;cout << high_resolution_clock::period::den << endl;cout << "steady = " << boolalpha << high_resolution_clock::is_steady << endl;cout << "------------------------------ " << endl;cout << "steady_clock" << endl;cout << steady_clock::period::num << endl;cout << steady_clock::period::den << endl;cout << "steady = " << boolalpha << steady_clock::is_steady << endl;getchar();return 0;
}

测试结果(Windows 10上,Visual Studio 2017编译)

system_clock
1
10000000
steady = false
------------------------------
high_resolution_clock
1
1000000000
steady = true
------------------------------
steady_clock
1
1000000000
steady = true

system_clock是微秒精度且可调整,steady_clock和high_resolution_clock是纳秒精度不可调整。

实例测试一段代码的执行时间。

#include <iostream>
#include <chrono>
using namespace std;
int main()
{using namespace std::chrono;steady_clock::time_point t1 = steady_clock::now();cout << "Hello World\n";steady_clock::time_point t2 = steady_clock::now();cout << duration <double, milli>(t2 - t1).count() << " tick count" << endl;getchar();return 0;
}

C++中Duration、Time_point和Clocks相关推荐

  1. matlab中duration是什么意思,C++ duration(STL duration)模板用法详解

    duration (持续时间) 是定义为时间刻度数的时间间隔,可以指定一个时间刻度是多少秒.因此,时间刻度是衡量时间长短的基础.duration 模板的实例类型的对象定义了 duration.时间刻度 ...

  2. 关于MP4 fileformat中 duration及timescale相关的几个地方

    http://www.cnblogs.com/goodloop/archive/2010/11/08/1872004.html 转载于:https://www.cnblogs.com/eustoma/ ...

  3. (原创)c++11中的日期和时间库

    c++11提供了日期时间相关的库chrono,通过chrono相关的库我们可以很方便的处理日期和时间.c++11还提供了字符串的宽窄转换功能,也提供了字符串和数字的相互转换的库.有了这些库提供的便利的 ...

  4. 聊聊C++标准库,准标准库中关于时间的概念和用法

    概要 在实际C++业务开发中,经常需要使用系统API或者标准库去获取时间,计算时间的需求,其中,时间按概念又分时间段,时间点:按表达形式又分系统时间,本地时间:其实,获取到了时间,如何通过日志的方式把 ...

  5. C++11 中chrono库 实现高精度定时

    一种"传统"ctime计时方法: #include <ctime> using namespace std;clock_t start = clock(); // do ...

  6. c++中chrono学习

    chrono是一个时间库,可以方便的用来计时,测量一些性能. 在chrono中,有三个概念,分别是:duration.time_point和Clocks. duration 从单词上可以看出,表示一段 ...

  7. C++11中的chrono库

    文章目录 前言 1.记录时长的duration 2.表示时间点的time_point 3.获取系统时钟的clocks 前言 C++11提供了日期时间相关的库chrono,通过chrono库可以很方便的 ...

  8. TimeQuest约束外设之诡异的Create Generated Clocks用法

    最近在altera FPGA里设计一个外设的驱动模块,模块本身逻辑很简单如下图所示,但是模块和外设之间的时序约束问题搞的很头疼,今天先讲讲总结的一些Timequest下外设约束方法,特别是那毫无用户体 ...

  9. [原创]TimeQuest约束外设之诡异的Create Generated Clocks用法

    刚入驻博客园,先搬几篇之前在EDN原创的文章,EDN的链接http://bbs.ednchina.com/BLOG_13570357612_2000177.HTM 最近在altera FPGA里设计一 ...

  10. 房产管理系统设计html,HTML5 3D 在智慧物业/地产管理系统中的应用

    概述 该博文主要展示采用 HT for Web 提供的可视化技术,对智慧房产.智慧物业相关方向的可视化呈现做的一点尝试. 传统的 智慧房产/楼宇自动化/智慧物业 常会采用 BIM(建筑信息模型 Bui ...

最新文章

  1. Angular5学习笔记 - 虚拟RestfulApi配置与使用(六)
  2. 2021操作系统知识结构图
  3. 爬虫工具篇 - 必会用的 6 款 Chrome 插件
  4. 深入理解软件和硬件(国庆精彩活动预告)
  5. ES10的动态导入文件
  6. python 图像处理_Python中的十大图像处理工具
  7. c语言缩写一个人的名字,用C语言输入一个人的英文名字统计个数输出
  8. 什么是数据库的三大范式?
  9. 支付宝APP支付里设置应用网关和授权回调地址是不必填的
  10. TCP/IP——链路层简记
  11. 赛效:怎么用改图宝给图片添加水印?
  12. python绘制曲线y=2x+5_Python绘制简易的二维图像
  13. 浅谈Jsch SSH2
  14. 复数矩阵求逆的 C 语言程序
  15. 三言二拍:五年有多长对牛乱弹琴 | Playinamp;#39; with IT
  16. 操作系统课程课程笔记
  17. 扬帆际海:个人如何做跨境电商
  18. SyncTime for Mac v3.6文件同步工具
  19. mybatis-plus自定义sql报错 ew.customSqlSegment
  20. Ubuntu22下OpenCV4.6.0+contrib模块编译安装

热门文章

  1. 为什么要有域名,看完你就懂了。
  2. 手把手系列--STM32H750移植FreeRTOS(二)--优化编译速度
  3. 腾讯视频、爱奇艺、豆果美食等为线下贷款中介导流、个人信息遭倒卖
  4. linux工作区目录,Linux(以RHEL7为例)下添加工作区的方法|| The Way To Add Workspace On Linux...
  5. SDUT—Python程序设计实验六(字典与集合)
  6. ubuntu 解包和压包.img文件
  7. win10桌面的计算机图标怎么删除,win10系统桌面图标小箭头去掉的操作步骤
  8. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
  9. 《结网》@互联网产品经理改变世界 读后感
  10. drony+fiddler抓包