我的编程空间,编程开发者的网络收藏夹
学习永远不晚

c++11 chrono的知识点有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

c++11 chrono的知识点有哪些

这篇文章主要介绍“c++11 chrono的知识点有哪些”,在日常操作中,相信很多人在c++11 chrono的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c++11 chrono的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

chrono是c++ 11中的时间库,提供计时,时钟等功能。

学习chrono,关键是理解里面时间段(Durations)、时间点(Time points)的概念。

1.精度:

时钟节拍(时间精度):

template <intmax_t N, intmax_t D = 1> class ratio;

其中N表示分子,D表示分母,默认用秒表示的时间单位。

N对应于其成员num,D对应于其成员den

常用的单位:

ratio<60, 1>                    minute

ratio<1, 1>                      second

ratio<1, 1000>               millisecond

...

ratio主要是是为后面将要讲解的时间段,时间点等提供精度(单位)

#include<iostream>#include<chrono>using namespace std;int main(){cout << "millisecond : ";cout << std::chrono::milliseconds::period::num << "/" << std::chrono::milliseconds::period::den << "s" <<endl;system("pause");return 0;}

c++11 chrono的知识点有哪些

2.时间段:

template <class Rep, class Period = ratio<1> >class duration;

std::chrono::duration 表示一段时间,比如两个小时,12.88秒,半个时辰,一炷香的时间等等

Rep表示一种数值类型,用来表示Period的数量,比如int float double。

Period是ratio类型,用来表示上面所说的单位精度,比如second milisecond。

chrono中宏定义了许多特例化了的duration: 就是常见的hours,miniutes,seconds,milliseconds等,使用std::chrono::milliseconds直接使用。

(1)构造函数很简单

(1)duration() = default;    //默认构造(2)duration (const duration& dtn);        //(2)(3)拷贝构造(3)template<class Rep2, class Period2>   constexpr duration (const duration<Rep2,Period2>& dtn);(4)template<class Rep2>      //传递一个某类型(int等)的数值,构造一个时间段      constexpr explicit duration (const Rep2& n);

(2)成员函数count()返回单位时间的数量。

#include <iostream>#include <chrono>int main(){std::chrono::milliseconds mscond(1000); // 1 secondstd::cout << mscond.count() << " milliseconds.\n"; std::cout << mscond.count() * std::chrono::milliseconds::period::num / std::chrono::milliseconds::period::den;std::cout << " seconds.\n";system("pause");return 0;}

c++11 chrono的知识点有哪些

(2)当不要求截断值的情况下(时转换成秒是没问题,但是秒转换成时就不行)时间段的转换是隐式
的。显示转换可以由 std::chrono::duration_cast<> 来完成。
比如 std::chrono::milliseconds ms(54802);

std::chrono::seconds s=std::chrono::duration_cast<std::chrono::seconds>(ms);

这里的结果就是截断的,而不是进行了舍入,所以s最后的值将为54。

3.时间点:

template <class Clock, class Duration = typename Clock::duration>  class time_point;

std::chrono::time_point 表示一个具体时间,如上个世纪80年代、今天下午3点、火车出发时间等,只要它能用计算机时钟表示。

第一个模板参数Clock用来指定所要使用的时钟(标准库中有三种时钟,system_clock,steady_clock和high_resolution_clock。见4时钟详解),第二个模板函数参数用来表示时间的计量单位(特化的std::chrono::duration<> )

时间点都有一个时间戳,即时间原点。chrono库中采用的是Unix的时间戳1970年1月1日 00:00。所以time_point也就是距离时间戳(epoch)的时间长度(duration)。

(1)构造函数:

(1)
 time_point();           //默认构造函数,时间戳作为其值
(2)
template <class Duration2>time_point (const time_point<clock,Duration2>& tp);  //拷贝构造函数
(3)
explicit time_point (const duration& dtn);           //使用duration构造,就是距离时间戳的时间长度

(2)时间点有个重要的函数:duration time_since_epoch()  (用于获取当前时间点距离时间戳的时间长度)

即经常用来得到当前时间点到1970年1月1日00:00的时间距离、该函数返回的duration的精度和构造time_point的时钟(Clock)有关(见4时钟详解)。

#include <iostream>#include <chrono>#include <ctime>using namespace std;int main(){//距离时间戳2两秒chrono::time_point<chrono::system_clock, chrono::seconds> tp(chrono::seconds(2));cout << "to epoch : " <<tp.time_since_epoch().count() << "s" <<endl;//转化为ctime,打印输出时间点time_t tt = chrono::system_clock::to_time_t(tp);char a[50];ctime_s(a, sizeof(a), &tt);cout << a;system("pause");return 0;}

c++11 chrono的知识点有哪些

可以看出,时间戳就是使用的Unix的时间戳。

4.时钟:(代表当前系统的时间)

chrono中有三种时钟:system_clock,steady_clock和high_resolution_clock。每一个clock类中都有确定的time_point, duration, Rep, Period类型。

system_clock是不稳定的。因为时钟是可调的,即这种是完全自动适应本地账户的调节。这种调节可能造成的是,首次调用now()返回的时间要早于上次调用now()所返回的时间,这就违反了节拍频率的均匀分布。稳定闹钟对于超时的计算很重要,所以C++标准库提供一个稳定时钟 std::chrono::steady_clock。std::chrono::high_resolution_clock 是标准库中提供的具有最小节拍周期(因此具有最高的精度的时钟)。

上文所说time_since_epoch(),以及将要介绍的now()函数的返回值都依赖于时钟的精度,测试时钟的精度的一种方法就是:

#include <iostream>#include <chrono>using namespace std;int main(){cout << "system clock          : ";cout << chrono::system_clock::period::num << "/" << chrono::system_clock::period::den << "s" << endl;cout << "steady clock          : ";cout << chrono::steady_clock::period::num << "/" << chrono::steady_clock::period::den << "s" << endl;cout << "high resolution clock : ";cout << chrono::high_resolution_clock::period::num << "/" << chrono::high_resolution_clock::period::den << "s" << endl;system("pause");return 0;}

c++11 chrono的知识点有哪些

windows系统的测试结果是system_clock的精度是100纳秒,而high_resolution的精度是1纳秒,对于程序来说,一般毫秒级就够了,所以说chrono提供的时钟精度绰绰有余。

(1)成员函数static time_point now() noexcept; 用于获取系统的当前时间。

(2)由于各种time_point表示方式不同,chrono也提供了相应的转换函数 time_point_cast。

template <class ToDuration, class Clock, class Duration>  time_point<Clock,ToDuration> time_point_cast (const time_point<Clock,Duration>& tp);

传一个要转换为的精度的duration模板参数和一个要转换的time_point参数(用法见下面综合应用)

(3)其他成员函数:

to_time_t() time_point转换成time_t秒

from_time_t() 从time_t转换成time_point

综合应用:

输出当前时间,并且计算当前的时间距离1970年1月1日00:00的毫秒数

#include <iostream>#include <chrono>#include <ctime>using namespace std;int main(){//定义毫秒级别的时钟类型typedef chrono::time_point<chrono::system_clock, chrono::milliseconds> microClock_type;//获取当前时间点,windows system_clock是100纳秒级别的(不同系统不一样,自己按照介绍的方法测试),所以要转换microClock_type tp = chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now());//转换为ctime.用于打印显示时间time_t tt = chrono::system_clock::to_time_t(tp);char _time[50];ctime_s(_time,sizeof(_time),&tt);cout << "now time is : " << _time;//计算距离1970-1-1,00:00的时间长度,因为当前时间点定义的精度为毫秒,所以输出的是毫秒cout << "to 1970-1-1,00:00  " << tp.time_since_epoch().count() << "ms" << endl;system("pause");return 0;}

c++11 chrono的知识点有哪些

c++11 chrono的知识点有哪些

通过两张图片对比,时间点上相差48-34=14秒、、下面的一长串数字,切掉3位(毫秒)、是28-14=14秒、、正确!说明这一串数字的最后三位就是毫秒数、、充分说明了达到了毫秒级别。

将上面的程序中millisconds换成microseconds或者更小的单位,便可达到微妙,甚至更高的精度。

到此,关于“c++11 chrono的知识点有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

c++11 chrono的知识点有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

c++11 chrono的知识点有哪些

这篇文章主要介绍“c++11 chrono的知识点有哪些”,在日常操作中,相信很多人在c++11 chrono的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”c++11 chrono的知识点有哪些
2023-06-21

C/C++指针知识点有哪些

本篇内容介绍了“C/C++指针知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!基础部分关于内存内存含义:存储器:计算机的组成中,用
2023-06-03

C++的基础知识点有哪些

这篇文章主要介绍“C++的基础知识点有哪些”,在日常操作中,相信很多人在C++的基础知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++的基础知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-17

C++语法知识点有哪些

这篇文章主要讲解了“C++语法知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++语法知识点有哪些”吧!C++程序的组成 (1)预处理命令以#开头。三类预处理命令。A 宏定义命令
2023-06-17

C#多线程的知识点有哪些

这篇文章主要介绍“C#多线程的知识点有哪些”,在日常操作中,相信很多人在C#多线程的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#多线程的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-17

C++ Primer变量的知识点有哪些

这篇文章主要介绍“C++ Primer变量的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++ Primer变量的知识点有哪些”文章能帮助大家解决问题。变量的定义形式一般为:类型说明符
2023-06-26

C++中引用的知识点有哪些

本篇内容主要讲解“C++中引用的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中引用的知识点有哪些”吧!引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不
2023-06-29

C#中所要知道的知识点有哪些

本文小编为大家详细介绍“C#中所要知道的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#中所要知道的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.在C#中,类名首字母需大写。如:c
2023-07-05

C语言函数的知识点有哪些

这篇文章主要介绍“C语言函数的知识点有哪些”,在日常操作中,相信很多人在C语言函数的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言函数的知识点有哪些”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-30

C++内存管理的知识点有哪些

这篇文章主要讲解了“C++内存管理的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++内存管理的知识点有哪些”吧!1. 简述下C++的内存分配方式。在C++中,内存可以分为 5
2023-07-05

SwiftUI的知识点有哪些

这篇文章主要讲解了“SwiftUI的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SwiftUI的知识点有哪些”吧!一、背景苹果于2019年度WWDC全球开发者大会上,发布了基于
2023-06-04

React的知识点有哪些

这篇文章主要介绍了React的知识点有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React的知识点有哪些文章都会有所收获,下面我们一起来看看吧。  组件的数据挂载方式,属性(props)props是正常
2023-06-03

C++模板基础知识点有哪些

这篇文章主要讲解了“C++模板基础知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++模板基础知识点有哪些”吧!引入我们对交换函数Swap已经非常熟悉了,但是我们经常会遇到这样的
2023-06-25

ECharts的知识点有哪些

本文小编为大家详细介绍“ECharts的知识点有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“ECharts的知识点有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。简介ECharts(Enterpris
2023-06-27

yolov5的知识点有哪些

这篇文章主要讲解了“yolov5的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“yolov5的知识点有哪些”吧!一、yolo中txt文件的说明:二、yolo跑视频、图片文件的格式
2023-07-02

HTML5的知识点有哪些

这篇文章主要讲解了“HTML5的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5的知识点有哪些”吧!1 :基于HTML5的移动Web应用Canvas绘图:通过获取HTML
2023-06-17

JavaScript8的知识点有哪些

这篇文章主要介绍“JavaScript8的知识点有哪些”,在日常操作中,相信很多人在JavaScript8的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript8的知识点有哪些”的疑
2023-06-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录