【发布时间】:2021-08-07 14:03:57
【问题描述】:
我有一个简单的程序,它使用chrono 来进行我从 MSVC 移植到 Code::Blocks 的计时。程序的显示屏显示从它开始到小数点后 16 位的增量时间。编译后,我注意到计时器仅从小数点后 6 位开始向上移动。代码不变,依然使用std::chrono::high_resolution_clock::now();的时间,然后计算我使用的delta时间
double localDeltaTime = std::chrono::duration_cast<std::chrono::nanoseconds>(m_EndTime - m_StartTime).count();
localDeltaTime = localDeltaTime / 1000000000.0;
这清楚地显示了纳秒计时,但 GCC 似乎只做微秒?这是一个已知问题吗?
编辑:
这是一个 MRE,
#include <chrono>
#include <iostream>
#include <iomanip>
int main()
{
std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
std::chrono::high_resolution_clock::time_point finish = start;
while (true)
{
finish = std::chrono::high_resolution_clock::now();
long double deltaTime = std::chrono::duration_cast<std::chrono::nanoseconds>(finish - start).count();
deltaTime /= 1000000000.0;
std::cout << std::setprecision(25) << deltaTime << std::endl;
}
return 0;
}
【问题讨论】:
-
您使用的是哪个版本的编译器以及使用哪个命令行?
-
@AlessandroTeruzzi 嗯,我也刚刚意识到,我更新了 Windows,这可能也更新了我的 Visual Studio 编译器。现在它们都只适用于微秒,GCC 和 MSVC,我以前在 1607,现在在 20h2。如何检查 Visual Studio 和 gcc 上的编译器?它也通过代码块,所以它没有编译命令行。
-
哦,是的,MinGW32,我一直对这一切感到困惑。我对此有点陌生
-
请注意,不能保证计时器具有纳秒级分辨率。在我工作过的盒子上,
std::chrono::high_resolution_clock通常具有 200 纳秒左右的基本分辨率。 -
我什么都没做,但我认为可能是 Windows 更新搞砸了。在纳秒之前工作,现在不是。 - 至少对于视觉工作室。
标签: c++ gcc visual-c++