chrono 在 C++ 中可以测量的最大时间间隔是多少?
What is the maximum time interval chrono can measure in C++?
我在编程方面经验丰富,但对 C++ 还是个新手。我正在尝试测量 运行 代码所需的时间。将来我可能会编写需要 hours/days 才能完成的代码。因此,了解计时码表时间测量的限制对我来说很重要。以毫秒为单位的精度应该足够了。
我可以测量的最长时间是多少?
我使用了下面的代码,请告诉我是否可以改进:
#include <chrono>
using namespace std::chrono;
auto start = high_resolution_clock::now();
// calculations here
auto finish = high_resolution_clock::now();
duration<double> elapsed = finish - start; // elapsed time in seconds
cout << elapsed.count();
std::chrono::milliseconds
保证存储在至少 45 位的基础有符号整数上,这意味着如果您经过的持续时间少于 544 年,您应该没问题。
来源:https://en.cppreference.com/w/cpp/chrono/duration
编辑:正如 orlp 指出的,您可能会遇到一些问题 if/when 时钟溢出(但我在 cppreference 上没有看到任何提及)。
此外,
The high_resolution_clock is not implemented consistently across different standard library implementations, and its use should be avoided.
[...]
Generally one should just use std::chrono::steady_clock or std::chrono::system_clock directly instead of std::chrono::high_resolution_clock: use steady_clock for duration measurements, and system_clock for wall-clock time.
这是一个内容丰富的小 HelloWorld:
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
using namespace std;
using years = duration<double, ratio_multiply<ratio<86'400>, ratio<146'097, 400>>>;
cout << years{high_resolution_clock::time_point::max() -
high_resolution_clock::now()}.count()
<< " years until overflow\n";
}
我首先创建一个基于双精度的年持续时间,以便输出易于阅读。然后我从 time_point
的 max()
中减去 now()
,将其转换为年并打印出来。
对我来说这只是输出:
292.256 years until overflow
我在编程方面经验丰富,但对 C++ 还是个新手。我正在尝试测量 运行 代码所需的时间。将来我可能会编写需要 hours/days 才能完成的代码。因此,了解计时码表时间测量的限制对我来说很重要。以毫秒为单位的精度应该足够了。
我可以测量的最长时间是多少?
我使用了下面的代码,请告诉我是否可以改进:
#include <chrono>
using namespace std::chrono;
auto start = high_resolution_clock::now();
// calculations here
auto finish = high_resolution_clock::now();
duration<double> elapsed = finish - start; // elapsed time in seconds
cout << elapsed.count();
std::chrono::milliseconds
保证存储在至少 45 位的基础有符号整数上,这意味着如果您经过的持续时间少于 544 年,您应该没问题。
来源:https://en.cppreference.com/w/cpp/chrono/duration
编辑:正如 orlp 指出的,您可能会遇到一些问题 if/when 时钟溢出(但我在 cppreference 上没有看到任何提及)。
此外,
The high_resolution_clock is not implemented consistently across different standard library implementations, and its use should be avoided.
[...]
Generally one should just use std::chrono::steady_clock or std::chrono::system_clock directly instead of std::chrono::high_resolution_clock: use steady_clock for duration measurements, and system_clock for wall-clock time.
这是一个内容丰富的小 HelloWorld:
#include <chrono>
#include <iostream>
int
main()
{
using namespace std::chrono;
using namespace std;
using years = duration<double, ratio_multiply<ratio<86'400>, ratio<146'097, 400>>>;
cout << years{high_resolution_clock::time_point::max() -
high_resolution_clock::now()}.count()
<< " years until overflow\n";
}
我首先创建一个基于双精度的年持续时间,以便输出易于阅读。然后我从 time_point
的 max()
中减去 now()
,将其转换为年并打印出来。
对我来说这只是输出:
292.256 years until overflow