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";
}发布于 2011-12-05 13:56:16
最小可表示的持续时间是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;为什么会这样呢?时钟的::period成员被定义为“时钟的滴答周期(以秒为单位)”。它是std::ratio的一个专门化,它是一个在编译时表示比率的模板.它提供两个积分常数:num和den,一个分数的分子和分母。
发布于 2011-12-05 14:50:58
我对R.MartinhoFernandes的回答投了赞成票,因为我认为它对这个问题提供了最清晰、最直接的答案。不过,我想添加一些代码,这些代码显示了更多的<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>();
}首先,我创建了一个nanosecond,它使用double作为表示(NS)。我使用double,以防万一我需要显示纳秒的分数(例如0.5 ns)。
接下来,每个时钟都有一个名为duration的嵌套类型。这是一个chrono::duration,它将具有相同的std::ratio,因此也就是R. Martinho Fernandes的答案中指出的num和den。其中的一个duration,转换为NS,将给我们多少纳秒在一个时钟滴答Clock。可以使用duration成员函数从count()中提取该值。
对我来说,这个程序打印出来:
1 ns
1000 ns发布于 2011-12-05 13:43:27
表示时钟滴答周期的std::ratio类型,以命名空间std::chrono中的seconds.Defined表示。
template<intmax_t Num, intmax_t Denom = 1 > class ratio;https://stackoverflow.com/questions/8386128
复制相似问题