欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > chrono时间和日期库学习

chrono时间和日期库学习

2025/5/16 23:50:40 来源:https://blog.csdn.net/chenyijun/article/details/125822761  浏览:    关键词:chrono时间和日期库学习

此头文件是日期和时间库的一部分。类模板 std::chrono::duration 表示时间间隔。它由 Rep 类型的计次数和计次周期组成,其中计次周期是一个编译期有理f,表示从一个计次到下一个的秒数。在 duration 存储的数据只有 Rep 类型的计次数。若 Rep 是浮点类型,则 duration 能表示小数的计次数。Period 被包含为时长类型的一部分,且只在不同时长间转换时使用。

成员函数

(构造函数)

构造新 duration
(公开成员函数)

operator=

赋值内容
(公开成员函数)

count

返回计次的计数
(公开成员函数)

zero

[静态]

返回特殊时长值零
(公开静态成员函数)

min

[静态]

返回特殊时长值最小值
(公开静态成员函数)

max

[静态]

返回特殊时长值最大值
(公开静态成员函数)

operator+operator-

实现一元 + 和一元 -
(公开成员函数)

operator++operator++(int)operator--operator--(int)

自增或自减计次数
(公开成员函数)

operator+=operator-=operator*=operator/=operator%=

实现两个时长间的复合赋值
(公开成员函数)

非成员函数

duration_cast

(C++11)

转换时长到另一个拥有不同计次间隔的时长
(函数模板)

floor(std::chrono::duration)

(C++17)

以向下取整的方式,将一个时长转换为另一个时长
(函数模板)

ceil(std::chrono::duration)

(C++17)

以向上取整的方式,将一个时长转换为另一个时长
(函数模板)

round(std::chrono::duration)

(C++17)

转换时长到另一个时长,就近取整,偶数优先
(函数模板)

abs(std::chrono::duration)

(C++17)

获取时长的绝对值
(函数模板)

示例代码:

#include <chrono>
#include <ratio>
#include <iostream>
#include <thread>// duration TYPES  
//using nanoseconds = duration<long long, nano>;
//using microseconds = duration<long long, micro>;
//using milliseconds = duration<long long, milli>;
//using seconds = duration<long long>;
//using minutes = duration<int, ratio<60>>;
//using hours = duration<int, ratio<3600>>;void fun()
{std::this_thread::sleep_for(std::chrono::seconds(1));
}int main()
{// duration constructor examplestd::chrono::hours ho(3); //3小时std::chrono::milliseconds ms{ 3 }; //3毫秒std::chrono::duration<int, std::kilo> ks(3); //3000秒//使用小数计次 30Hz时错std::chrono::duration<double, std::ratio<1, 30>> hz30(3.5);//从3毫秒构造 3000 微秒std::chrono::microseconds us = ms;std::chrono::duration<double, std::milli> ms2 = us; // 3.0 毫秒// duration::count examplestd::cout << "ho========" << ho.count() << "\n";std::cout << "ms========" << ms.count() << "\n";std::cout << "ks========" << ks.count() << "\n";std::cout << "hz30======" << hz30.count() << "\n";std::cout << "us========" << us.count() << "\n";std::cout << "ms2=======" << ms2.count() << "\n";// duration operators= examplestd::chrono::minutes min{ 1 }; //1分钟std::chrono::seconds sec = min; //60秒std::chrono::milliseconds mil = min;//60 * 1000毫秒std::chrono::microseconds mic = min;//60 * 1000 * 1000微秒std::chrono::nanoseconds nan = min; //60 * 1000 * 1000 *1000纳秒std::cout << "min=======" << min.count() << "\n";std::cout << "sec=======" << sec.count() << "\n";std::cout << "mil=======" << mil.count() << "\n";std::cout << "mic=======" << mic.count() << "\n";std::cout << "nan=======" << nan.count() << "\n";std::chrono::duration<int> foo{ 0 };std::chrono::duration<int> bar{ 10 };std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";//value                      foo barfoo = bar;                 // 10  10std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";foo = foo + bar;           // 20  10std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";++foo;                     // 21  10std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";--bar;                     // 21   9std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";foo *= 2;                  // 42   9std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";foo /= 3;                  // 14   9std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";bar += (foo % bar);      // 14  14std::cout << "foo=======" << foo.count() << "\t" << "bar=======" << bar.count() << "\n";// duration::zero exampleusing std::chrono::steady_clock;steady_clock::time_point t1 = steady_clock::now();std::cout << "Printing out something...\n";steady_clock::time_point t2 = steady_clock::now();steady_clock::duration d = t2 - t1;if (d == steady_clock::duration::zero())std::cout << "The internal clock did not tick.\n";elsestd::cout << "The internal clock advanced " << d.count() << " periods.\n";steady_clock::time_point t3 = t1;steady_clock::duration d3 = t3 - t1;if (d3 == steady_clock::duration::zero())std::cout << "The internal clock did not tick.\n";elsestd::cout << "The internal clock advanced " << d3.count() << " periods.\n";std::cout << "steady_clock::duration::zero()=========" << steady_clock::duration::zero().count() << '\n';// duration::min/max examplestd::cout << "system_clock durations can represent:\n";std::cout << "min: " << std::chrono::system_clock::duration::min().count() << "\n";std::cout << "max: " << std::chrono::system_clock::duration::max().count() << "\n";const auto t11 = std::chrono::high_resolution_clock::now();fun();const auto t12 = std::chrono::high_resolution_clock::now();// 浮点时长:不需要 duration_castconst std::chrono::duration<double, std::milli> fp_ms = t12 - t11;// 整数时长:必须 duration_castconst auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t12 - t11);// 将整数时长转换为更短可整除的时间单位的整数时长:不需要 duration_castconst std::chrono::duration<long, std::micro> int_usec = int_ms;std::cout << "fun() use " << fp_ms.count() << " or " << int_ms.count() << " ms, or " << int_usec.count() << " mic\n";//std::cout << "f()用了" << fp_ms.count() << ", 或 " << int_ms.count() << " (整毫秒), 或" << int_usec.count() << " (整微秒)\n";//floor, round, ceil exampleusing namespace std::chrono_literals;using Sec = std::chrono::seconds;std::chrono::milliseconds ms5499{ 5499 }; //5499毫秒std::cout << std::showpos << ms5499.count() << "\t\t"<< std::chrono::floor<Sec>(ms5499).count() << '\t'    //向下取整<< std::chrono::round<Sec>(ms5499).count() << '\t'    //就近取整<< std::chrono::ceil <Sec>(ms5499).count() << '\n';   //向上取整std::chrono::milliseconds ms5501{ 5501 }; //5501毫秒std::cout << std::showpos << ms5501.count() << "\t\t"<< std::chrono::floor<Sec>(ms5501).count() << '\t'    //向下取整<< std::chrono::round<Sec>(ms5501).count() << '\t'    //就近取整<< std::chrono::ceil <Sec>(ms5501).count() << '\n';   //向上取整return 0;
}

运行结果:

参考:

https://cplusplus.com/reference/chrono/duration/

https://zh.cppreference.com/w/cpp/header/chrono

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词