我有兴趣在 Windows 中使用 C++ 测量精确到纳秒的特定时间点。这可能吗?如果不是,是否有可能获得至少以微秒为单位的特定时间?任何库都应该这样做,除非我认为可以使用托管代码。 谢谢
最佳答案
如果您有一个在多核计算机上运行的线程应用程序,QueryPerformanceCounter
可以(并且将会)返回不同的值,具体取决于代码执行的核心。请参阅this MSDN 文章。 (rdtsc
也有同样的问题)
这不仅仅是一个理论问题;这是一个问题。我们在应用程序中遇到了这个问题,不得不得出结论,唯一可靠的时间源是 timeGetTime,它只有 ms 精度(幸运的是,这在我们的例子中已经足够了)。我们还尝试修复线程的线程关联性,以保证每个线程始终从 QueryPerformanceCounter 获得一致的值,这确实有效,但绝对会降低应用程序的性能。
总而言之,Windows 上没有一个可靠计时器可以用于以微秒精度计时(至少在多核计算机上运行时不行)。
关于Windows下C++高精度时间测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27501216/