C++ chrono 库中的 steady_clock 、 system_clock、high_resolution_clock区别
C++11 中提供了一个计时的标准库 <chrono>
;
里面有三种时钟 clock: steady_clock, system_clock 和 high_resolution_clock;
区别
- steady_clock 是单调的时钟,相当于教练手中的秒表;只会增长,适合用于记录程序耗时;
- system_clock 是系统的时钟;因为系统的时钟可以修改;甚至可以网络对时; 所以用系统时间计算时间差可能不准。
- high_resolution_clock 是当前系统能够提供的最高精度的时钟;它也是不可以修改的。相当于 steady_clock 的高精度版本。
在 参考链接[2] 中提供了代码,可以查看自己的机器上三种时钟的时间精度。
// copied from http://www.informit.com/articles/article.aspx?p=1881386&seqNum=2;
// Author: Nicolai M. Josuttis#include <chrono>
#include <iostream>
#include <iomanip>template <typename C>
void printClockData ()
{using namespace std;cout << "- precision: ";// if time unit is less or equal one millisecondtypedef typename C::period P;// type of time unitif (ratio_less_equal<P,milli>::value) {// convert to and print as millisecondstypedef typename ratio_multiply<P,kilo>::type TT;cout << fixed << double(TT::num)/TT::den<< " milliseconds" << endl;}else {// print as secondscout << fixed << double(P::num)/P::den << " seconds" << endl;}cout << "- is_steady: " << boolalpha << C::is_steady << endl;
}int main()
{std::cout << "system_clock: " << std::endl;printClockData<std::chrono::system_clock>();std::cout << "\nhigh_resolution_clock: " << std::endl;printClockData<std::chrono::high_resolution_clock>();std::cout << "\nsteady_clock: " << std::endl;printClockData<std::chrono::steady_clock>();#ifdef _WIN32system("pause");
#endifreturn 0;
}
system_clock:
- precision: 0.000100 milliseconds
- is_steady: falsehigh_resolution_clock:
- precision: 0.000001 milliseconds
- is_steady: truesteady_clock:
- precision: 0.000001 milliseconds
- is_steady: true
建议
以下是 stackoverflow 上一个大佬给出的建议difference between steady clocl vs system clock
- 尽量不要使用
count()
方法 - 尽量不要使用
time_since_epoch()
理由是: 提供了类型安全的机制防止用户进行单位换算的时候出错;但是这两个函数是例外的,起到“紧急出口的作用”,
Such emergencies arise when (for example) the committee neglects to give you all the tools you need to get the job done (such as I/O) for the types, or such as the need to interface with some other timing API via integers
在I/O 或者与其他 通过整数传参数的时间函数接口中使用。
使用方法
例子:一个用来测试代码段运行时间的宏
#include <chrono>#define TIMERSTART(tag) auto tag##_start = std::chrono::steady_clock::now(),tag##_end = tag##_start
#define TIMEREND(tag) tag##_end = std::chrono::steady_clock::now()
#define DURATION_s(tag) printf("%s costs %d s\n",#tag,std::chrono::duration_cast<std::chrono::seconds>(tag##_end - tag##_start).count())
#define DURATION_ms(tag) printf("%s costs %d ms\n",#tag,std::chrono::duration_cast<std::chrono::milliseconds>(tag##_end - tag##_start).count());
#define DURATION_us(tag) printf("%s costs %d us\n",#tag,std::chrono::duration_cast<std::chrono::microseconds>(tag##_end - tag##_start).count());
#define DURATION_ns(tag) printf("%s costs %d ns\n",#tag,std::chrono::duration_cast<std::chrono::nanoseconds>(tag##_end - tag##_start).count());// usage:
// TIMERSTART(for_loop);
// for (int i = 0; i < 100000; i++)
// {
// i*i;
// }
// TIMEREND(for_loop);
// DURATION_ms(for_loop);
参考
- c++ - Difference between steady_clock vs system_clock? - Stack Overflow
- C++ Stardard Library:A Tutorial and Reference, 2nd Edition
C++ chrono 库中的 steady_clock 、 system_clock、high_resolution_clock区别相关推荐
- python自带的sum()函数和numpy库中的sum()函数的区别
在学习<机器学习实战>一书的第十章时,对 return np.sqrt(sum(np.power(vecA - vecB, 2))) 这样一条语句输出的结果老是不对,明明想要输出的是对两个 ...
- C++标准库中sstream和strstream的区别
在C++有两种字符串流,一种在sstream中定义, 另一种在strstream中定义. 它们实现的东西基本一样. strstream里包含 class strstreambuf; class ist ...
- c++ stl库中begin()和end()的区别
c.begin(); 返回指向容器最开始位置数据的指针 c.end(); 返回指向容器最后一个数据单元+1的指针 如果我们要输出最后一个元素的值应该是 *( ...
- contourf参数 python_matplotlib.pyplot可视化库中contour与contourf的区别
contour做的云图不是填充的,而contourf画的云图是填充的 来两个例子一目了然,代码可用.(本文例子来自matplotlib管网) contour函数 contour([X, Y,] Z, ...
- (笔记)处理日期和时间的方法(chrono 库,time_t等)
文章目录 0 摘要 1 chrono 库 1.1 时间间隔duration 1.2 时间点time point 1.3 时钟clocks 1.3.1 system_clock 1.3.2 steady ...
- C++处理日期和时间的chrono库
C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利.chrono 库主要包含三种类型的类:时间间隔duration.时钟cl ...
- C++ 使用 chrono 库处理日期和时间
C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利.chrono 库主要包含三种类型的类:时间间隔duration.时钟cl ...
- 处理日期和时间的 chrono 库
C++11 中提供了日期和时间相关的库 chrono,通过 chrono 库可以很方便地处理日期和时间,为程序的开发提供了便利.chrono 库主要包含三种类型的类:时间间隔duration.时钟cl ...
- C++11库中 steady_clock , system_clock和high_resolution_clock的区别
C++11 中提供了一个计时的标准库 <chrono>; 里面有三种时钟 clock: steady_clock, system_clock 和 high_resolution_clock ...
最新文章
- 算法笔记-堆相关、堆的定义、大小根堆、算法程序实现、堆的算法题、C#写法
- 阿帕奇搭建文件服务器,关于LINUX文件服务器简单搭建---NFS与APACHE服务
- Post和Get差异
- abap 生成流水号每天从1开始_条码软件如何制作循环流水号
- 在应用程序级别以外使用注册为 allowDefinition='MachineToApplication' 的节是错误
- VSTO 得到Office文档的选中内容(Word、Excel、PPT、Outlook)
- mysql引号注入_MySql注入
- Git忽略项目中的指定的文件
- 在社会上闯荡必须要牢记的
- SPSS下载安装教程
- Go语言实战的知识图谱
- c语言教材系统管理课设
- 数据结构试卷及答案(四)
- H5静态网页设计与制作_川西旅游网设计作品(HTML+CSS+jQuery)
- 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)...
- 如何解决算百分比,加起来不是100%的问题
- 关于荧光染料(FITC、RB罗丹明、Cy3,Cy3.5,Cy5,Cy5.5,Cy7,Cy7.5)
- 软考高级-信息系统管理师之综合测试与管理(最新版)
- Mathematica 作图详解
- 计算机用户被禁用,administrator账户被停用怎么办【图文教程】
热门文章
- c 语言 模板函数,函数模板特化
- linux安装java的脚本吗,Linux安装JDK脚本
- unity2018关联不到vs_原尚股份VS.长久物流,整车物流和零部件物流,谁才是好生意?...
- stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)
- python开发小型数据库_Python开发【第十七篇】:MySQL(一)
- Docker两个问题的讨论
- 洛谷 3953 NOIP2017提高组Day1 T3 逛公园
- Python模拟Linux的Crontab, 写个任务计划需求
- 高级Bash脚本编程指南《Advanced Bash-Scripting Guide》 in Chinese
- nodejs+vue.js+webpack