tow*_*owi 24 c++ duration clock c++11 c++-chrono
C++ 11定义high_resolution_clock并且它具有成员类型period和rep.但我无法弄清楚如何才能获得该时钟的精度.
或者,如果我可能达不到精度,我能以某种方式至少得到一个在纳秒之间的最小可表示持续时间的计数吗?可能用period?
#include <iostream>
#include <chrono>
void printPrec() {
std::chrono::high_resolution_clock::rep x = 1;
// this is not the correct way to initialize 'period':
//high_resolution_clock::period y = 1;
std::cout << "The smallest period is "
<< /* what to do with 'x' or 'y' here? */
<< " nanos\n";
}
Run Code Online (Sandbox Code Playgroud)
R. *_*des 27
最小可表示的持续时间是high_resolution_clock::period::num / high_resolution_clock::period::den秒.你可以像这样打印:
std::cout << (double) std::chrono::high_resolution_clock::period::num
/ std::chrono::high_resolution_clock::period::den;
Run Code Online (Sandbox Code Playgroud)
为什么是这样?时钟的::period成员定义为"以秒为单位的时钟的滴答周期".它的特殊化std::ratio是在编译时表示比率的模板.它提供了两个积分常数:num和den分数的分子和分母.
How*_*ant 20
我赞成R. Martinho Fernandes的答案,因为我相信它提供了最清晰,最直接的答案.但是我想添加一些显示更多<chrono>功能的代码,并解决了OP问题的这一部分:
我能以某种方式至少得到一个在纳秒之间的最小可表示持续时间的计数吗?
将这么多信息写入评论是不切实际的.但我认为这个答案是对R. Martinho Fernandes的回答的支持性评论.
首先是代码,然后是解释:
#include <iostream>
#include <chrono>
template <class Clock>
void
display_precision()
{
typedef std::chrono::duration<double, std::nano> NS;
NS ns = typename Clock::duration(1);
std::cout << ns.count() << " ns\n";
}
int main()
{
display_precision<std::chrono::high_resolution_clock>();
display_precision<std::chrono::system_clock>();
}
Run Code Online (Sandbox Code Playgroud)
首先,我创建了一个nanosecond使用a double作为表示(NS).我double只是在需要显示纳秒的分数时使用(例如0.5 ns).
接下来,每个时钟都有一个名为的嵌套类型duration.这是一个与R. Martinho Fernandes的答案chrono::duration相同的std::ratio,因此也是如此.其中一个转换为将在一个时钟周期内给出多少纳秒.并且可以使用成员函数从该值中提取该值.numdendurationNSClockdurationcount()
对我来说这个程序打印出来:
1 ns
1000 ns
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16998 次 |
| 最近记录: |