以C+为单位计时的纳秒精度+; 在C++中有没有办法获得纳秒精度?与Java中的纳秒计时器(System.nanotime)相当的东西。

以C+为单位计时的纳秒精度+; 在C++中有没有办法获得纳秒精度?与Java中的纳秒计时器(System.nanotime)相当的东西。,c++,milliseconds,delta,nanotime,C++,Milliseconds,Delta,Nanotime,在C++11实现中,您应该能够使用 在linux和其他几种Unix版本中,clock\u gettime也可以为您提供纳秒精度的时间。在windows中,有一个提供毫秒精度的 然而,与所有类似的情况一样,它取决于实际操作系统/库/etc的实现,如果您实际获得纳秒、微秒、毫秒或其他精度-时间通常以纳秒表示,但这并不一定给您带来高精度-它可能每“滴答”跳1000000或10000或14718纳秒 如果您使用的是Windows/Visual Studio(它可能没有实现std::chrono,至少在V

在C++11实现中,您应该能够使用

在linux和其他几种Unix版本中,
clock\u gettime
也可以为您提供纳秒精度的时间。在windows中,有一个提供毫秒精度的


然而,与所有类似的情况一样,它取决于实际操作系统/库/etc的实现,如果您实际获得纳秒、微秒、毫秒或其他精度-时间通常以
纳秒表示,但这并不一定给您带来高精度-它可能每“滴答”跳1000000或10000或14718纳秒

如果您使用的是Windows/Visual Studio(它可能没有实现
std::chrono
,至少在VS2010中没有),那么您可以使用
QueryPerformanceCounter
QueryPerformanceFrequency
来获得计时任务的最高精确度:

LARGE_INTEGER freq, counter1, counter2;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&counter1);
task();
QueryPerformanceCounter(&counter2);
long double elapsed = (long double) (counter2.QuadPart - counter1.QuadPart) / (long double) freq.QuadPart;

在非实时操作系统中,您不会获得纳秒精度。另见,除其他外。纳秒精度?在哪两个事件之间?请注意,Java的
system.nanoTime()
提供纳秒精度,但不提供纳秒精度。也就是说,它的单位是纳秒,但无法保证值的变化频率。由于存在许多问题——核心之间的常见错同步(可能是几秒钟,MS很容易将其归咎于HAL/BIOS写入程序),CPU节能模式启动后漂移等。我记得错同步只发生在某些双核AMD上,如果你只是用它来测量小时间间隔的性能,那么省电也不是什么大问题。它仍然是最精确的“计时器”,尽管我想作者应该说明他想要它的目的。你记得的任何陈述都可能是在问题相对较新的时候写的,但它一直存在,并且在现代硬件上是最新的,包括我坐的Intel Core i7。大约一年前,我写了一个库来测量和补偿启动时的跨核漂移,当时在这台电脑上测量了显著的漂移。我在上一家公司的许多现代机器上测量了类似的漂移(有时是几秒钟),我怀疑那里也有Xeon,但记不清了。