3 Star 2 Fork 3

四月是你的谎言/深入应用C++11:代码优化与工程级应用 的实践代码

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
6-1.cpp 2.87 KB
一键复制 编辑 原始数据 按行查看 历史
#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;
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/HeLiangMsg/c11_book_learned_code.git
[email protected]:HeLiangMsg/c11_book_learned_code.git
HeLiangMsg
c11_book_learned_code
深入应用C++11:代码优化与工程级应用 的实践代码
master

搜索帮助