《C++标准库》学习笔记 — 通用工具 — Clock 和 Timer

一、Chrono 程序库概观

Chrono 程序库的设计,是希望能够处理timer 和 clock在不同系统中可能不同的事实,同时也是为了强化时间精度。为避免像 POSIX 的 tine 程序库那样每十年就引入一个新的时间类型,C++标准库的目标是提供一个精度中立概念,把 duration(时间段)timepoint(时间点) 从特定 clock(始终) 区分开来。最终结果就是 chrono 程序库核心由以下类型或概念组成,形成一个抽象层:
(1)所谓 duration 值得是在某时间单位上的一个明确的 tick(片刻数)。举个例子,3分钟时间段意指3个1分钟。其中 3 是片刻数,而 1分钟 是时间单位。
(2)所谓 timepoint 的意思是一个 duration 和一个 epoch(起点) 的组合。典型例子是 2000年新年午夜 时间点,它被描述为 自1970年1月1日开始的第1262300400秒
(3)timepoint 的概念其实是以某个 clock 为参数。clock 是个对象,定义 timepointepoch。不同的 clock 有着不同的 epoch。一般而言,当操作函数处理多个 timepoint,例如计算两个 timepoint 之间的差距时,必须采用相同的 epoch/clock
在这里插入图片描述

二、duration

Duration 是一个数值(表示 tick 个数)和一个分数(表现时间单位,以秒计)的组合。其中的分数由 class ratio 描述。例如:

std::chrono::duration<double, std::ratio<60>> halfAMinute(0.5);

此类型表示的是以60秒为 duration 单位的数据,0.5表示0.5个 tick

为了提供更多的方便性,C++标准库提供了各个时间单位的定义:
在这里插入图片描述

1、duration的算术运算

duration 提供了许多操作符:
在这里插入图片描述
运算符的左右操作符的单位类型可以不同,它们的运算结果的时间单位是两个操作数的单位的最大公约数。需要注意的是,我们可以将高精度的时间隐式转换为低精度,反过来却不行。例如:

#include <iostream>
#include <ratio>
#include <chrono>
#include <vector>
#include <ctime>

int main()
{
   
	using namespace std;
	using namespace chrono;

	seconds tenSeconds(10);
	minutes fiveMinutes(5);

	cout << boolalpha << (tenSeconds < fiveMinutes) << endl;

	duration<int, ratio<1, 2>> ThreeHalfSeconds(2);
	duration<int, ratio<1, 3>> fiveOneThirdSeconds(5);
	cout << ThreeHalfSeconds + fiveOneThirdSeconds << endl;
	cout << ThreeHalfSeconds - fiveOneThirdSeconds 
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值