gpt4 book ai didi

c++ - 使用 High_resolution_clock 的时间测量未按预期工作

转载 作者:行者123 更新时间:2023-11-28 06:09:07 26 4
gpt4 key购买 nike

我希望能够用我的时钟类测量耗时(对于帧时间)。 (问题在代码下面描述。)

时钟.h

typedef std::chrono::high_resolution_clock::time_point timePt;

class Clock
{
timePt currentTime;
timePt lastTime;

public:
Clock();

void update();
uint64_t deltaTime();

};

时钟.cpp

#include "Clock.h"

using namespace std::chrono;

Clock::Clock()
{
currentTime = high_resolution_clock::now();
lastTime = currentTime;
}

void Clock::update()
{
lastTime = currentTime;
currentTime = high_resolution_clock::now();
}

uint64_t Clock::deltaTime()
{
microseconds delta = duration_cast<microseconds>(currentTime - lastTime);
return delta.count();
}

当我尝试像这样使用时钟时

Clock clock;

while(1) {
clock.update();
uint64_t dt = clock.deltaTime();

for (int i=0; i < 10000; i++)
{
//do something to waste time between updates
int k = i*dt;
}
cout << dt << endl; //time elapsed since last update in microseconds
}

对我来说,它打印了大约 30 次“0”,直到它最终打印出一个总是非常接近“15625”微秒(15.625 毫秒)之类的数字。

我的问题是,为什么两者之间没有任何东西?我想知道我的实现是错误的还是 high_resolution_clock 的精度表现得很奇怪。有什么想法吗?

编辑:我在 Windows 8 计算机上使用 Codeblocks 和 mingw32 编译器。

编辑2:我尝试运行以下应该显示 high_resolution_clock 精度的代码:

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>();
}

对我来说它打印:“1000 ns”。所以我猜 high_resolution_clock 的精度是 1 微秒吧?然而在我的测试中它似乎有 16 毫秒的精度?

最佳答案

您使用的是什么系统? (我猜是 Windows?已知 Visual Studio 有此问题,现已在 VS 2015 中修复,请参阅 bug report )。在某些系统上,high_resolution_clock 被定义为 system_clock 的别名,它的分辨率可能非常低,比如您看到的 16 毫秒。例如,参见此 question .

关于c++ - 使用 High_resolution_clock 的时间测量未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com