代码拉取完成,页面将自动刷新
#include <chrono>
#include <iostream>
#include <ratio>
#include <thread>
using std::cout;
using std::endl;
int main(void)
{
///记录时长的duration
typedef std::chrono::duration<int, std::ratio<1,1>> seconds_type;
typedef std::chrono::duration<int, std::milli> milliseconds_type;
typedef std::chrono::duration<int, std::ratio<60*60>> hours_type;
hours_type h_oneday(24); //24 h
seconds_type s_oneday(60*60*24);
milliseconds_type ms_oneday(s_oneday);
/* std::thread t1([](){*/
//std::cout << "sleep 3" << std::endl;
//std::this_thread::sleep_for(std::chrono::seconds(3));
//});
//t1.join();
using namespace std::chrono;
{
milliseconds foo(1000); //相等于 chrono::duration<int, ratio<1, 1000>>
foo *= 60;
seconds bar(10);
std::cout << "duration(in preiods):";
std::cout << foo.count() << " milliseconds \n"; //返回持续时间对象的内部计数, 此处的 duration object 为 毫秒 milliseconds
std::cout << "duration(in preiods):";
std::cout << bar.count() << " seconds \n"; //返回持续时间对象的内部计数,此处 duration object 为 秒 seconds
}
{
//时间间隔之间可以做运算
std::chrono::minutes t1(10);
std::chrono::seconds t2(60);
std::chrono::seconds t3 = t1 - t2;
std::cout << t3.count() << " sencond " << std::endl;
cout << std::chrono::duration_cast<std::chrono::minutes>(t3).count() << " minutes " << endl;
}
//duration 的加减运算有一定的规则,当两个 duration 时钟周期不相同时,
//会先统一成一种时钟,然后再作加减运算。统一成一种时钟的规则如下:
//对于 `ratio <x1, y1> count1;ration<x2, y2> count2;`如果x1、x2的最大公约数为x,
//y1、y2的最小公倍数为y,那么统一之后的ratio为ratio<x,y>
{
std::chrono::duration<double, std::ratio<9, 7>> d1(3);
std::chrono::duration<double, std::ratio<6, 5>> d2(3);
auto d3 = d1 - d2;
cout << typeid(d3).name() << endl;
cout << d3.count() << endl;
cout << std::chrono::duration_cast<std::chrono::minutes>(d3).count() << " minutes " << endl;
//将 dtn 的值转换为其他一些duration 类型,同时考虑到它们的periods 差异。
cout << std::chrono::duration_cast<std::chrono::duration<double, std::ratio<9, 7>>>(d3).count() << " minutes " << endl; //其实可以转换任意周期
}
//根据前面减少的规则,对于9/7 和 6/5, 分子取最小公约数,分母取最小公倍数,
//所以,统一之后的ruration 为 std::chrono::duration<double ,std::ratio<3, 35>>。
//然后再将原来的duraion转换为统一的duration,最后计算的时钟周期数为:
//((9/7) / (3/35) *3) - (6/5) / (3/35) *1) = 31
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。