千家信息网

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

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍"c++11 chrono的知识点有哪些",在日常操作中,相信很多人在c++11 chrono的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2026年10月31日c++11 chrono的知识点有哪些

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

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

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

1.精度:

时钟节拍(时间精度):

template  class ratio;

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

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

常用的单位:

ratio<60, 1> minute

ratio<1, 1> second

ratio<1, 1000> millisecond

...

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

#include#includeusing namespace std;int main(){        cout << "millisecond : ";        cout << std::chrono::milliseconds::period::num << "/" << std::chrono::milliseconds::period::den << "s" <

2.时间段:

template  >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   constexpr duration (const duration& dtn);(4)template      //传递一个某类型(int等)的数值,构造一个时间段      constexpr explicit duration (const Rep2& n);

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

#include #include int main(){        std::chrono::milliseconds mscond(1000); // 1 second        std::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;}

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

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

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

3.时间点:

template   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 time_point (const time_point& 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 #include #include using namespace std;int main(){        //距离时间戳2两秒        chrono::time_point tp(chrono::seconds(2));        cout << "to epoch : " <

可以看出,时间戳就是使用的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 #include 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;}

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

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

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

template   time_point time_point_cast (const time_point& 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 #include #include using namespace std;int main(){        //定义毫秒级别的时钟类型        typedef chrono::time_point microClock_type;        //获取当前时间点,windows system_clock是100纳秒级别的(不同系统不一样,自己按照介绍的方法测试),所以要转换        microClock_type tp = chrono::time_point_cast(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;}

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

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

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

时间 时钟 精度 函数 单位 就是 知识 成员 时间段 类型 学习 知识点 参数 系统 长度 方法 标准 模板 级别 纳秒 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 天津市摩尔互联网科技 河南云网互联网络科技有限公司 南京欣网互联网科技 电子科技大学互联网 有木互联网科技 大白互联网科技 佰商互联网科技有限公司 多迪互联网科技有限公司 重庆科技学院互联网 佩信高科技互联网 老年人脱离互联网科技的作文 济南有互联网科技公司吗 国大互联网教育科技有限公司薪资 互联网第三次科技革命特征 领航科技大厦互联网公司 互联网科技对化妆品行业 数字科技和互联网金融哪个好 重庆科技产业互联网有哪些 东风日产互联网科技公司叫什么 上海卓越科技互联网 麻工互联网科技 互联网金融 科技 滨湖区互联网智能科技产品供应 富国互联网科技创新基金 智腾互联网科技有限公司 玉溪新华互联网科技好不好 中国新注册互联网科技 广西泛欧互联网科技有限公司 科技互联网专业务虚会材料
0