定义于头文件
std::chrono
库chrono
库定义三种主要类型以及工具函数和常用 typedef 。
std::chrono::steady_clock
class steady_clock; (C++11 起)
类 std::chrono::steady_clock
表示单调时钟。此时钟的时间点无法减少,因为物理时间向前移动。此时钟与壁钟时间无关(例如,它能是上次重启开始的时间),且最适于度量间隔。
std::chrono::steady_clock
满足平凡时钟 (TrivialClock) 的要求。
成员类型 | 定义 |
rep |
表示时钟时长中计次数的算术类型 |
period |
表示时钟计次周期的 std::ratio 类型,单位为秒 |
duration |
std::chrono::duration |
time_point |
std::chrono::time_point |
constexpr bool is_steady [静态] |
稳定时钟标志,始终为 true |
std::chrono::steady_clock::now
static std::chrono::time_point
now() noexcept; (C++11 起)
返回表示当前时间的时间点。
(无)
表示当前时间的时间点。
#include
#include
#include
#include
volatile int sink;
int main()
{
for (auto size = 1ull; size < 1000000000ull; size *= 100)
{
// 记录开始时间
auto start = std::chrono::steady_clock::now();
// 做一些工作
std::vector v(size, 100);
sink = std::accumulate(v.begin(), v.end(), 0u); // 确保其副效应
// 记录结束时间
auto end = std::chrono::steady_clock::now();
std::chrono::duration diff = end - start;
std::cout << std::fixed << "Time to fill and iterate a vector of "
<< size << " ints : " << diff.count() << " s\n";
}
}
std::chrono::high_resolution_clock
class high_resolution_clock; (C++11 起)
类 std::chrono::high_resolution_clock
表示实现提供的拥有最小计次周期的时钟。它可以是 std::chrono::system_clock 或 std::chrono::steady_clock 的别名,或第三个独立时钟。
std::chrono::high_resolution_clock
满足平凡时钟 (TrivialClock) 的要求。
成员类型 | 定义 |
rep |
表示时钟的时期中计次数的算术类型 |
period |
表示时钟计次周期的 std::ratio 类型,单位为秒 |
duration |
std::chrono::duration |
time_point |
std::chrono::time_point |
constexpr bool is_steady [静态] |
若时间间隔计次始终为常量,即纵使在外部时钟调整的情况下,调用 now() 的返回值亦单调递增,则为 true ,否则为 false |
std::chrono::high_resolution_clock::now
static std::chrono::time_point
now() noexcept; (C++11 起)
返回表示当前时间的时间点。
(无)
表示当前时间的时间点。
#include
#include
#include
#include
volatile int sink;
int main()
{
for (auto size = 1ull; size < 1000000000ull; size *= 100)
{
// 记录开始时间
auto start = std::chrono::high_resolution_clock::now();
// 做一些工作
std::vector v(size, 42);
sink = std::accumulate(v.begin(), v.end(), 0u); // 确保其副效应
// 记录结束时间
auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration diff = end - start;
std::cout << "Time to fill and iterate a vector of "
<< size << " ints : " << diff.count() << " s\n";
}
}