gpt4 book ai didi

c++ - 使用 clocks_per_sec 计算过剩帧率太慢

转载 作者:行者123 更新时间:2023-11-27 23:02:34 25 4
gpt4 key购买 nike

我试图通过调用我在 Display() 回调函数开始时创建的自定义 CalculateFrameRate 方法来计算 GLUT 窗口的帧率。我在执行每一帧的计算后调用 glutPostRedisplay(),以便为每一帧调用 Display()。

我还有一个 int numFrames,它每帧递增(每次调用 glutPostRedisplay 时),我也将其打印出来。我的 CalculateFrameRate 方法计算出的速率约为 7 fps,但如果我查看秒表并将其与我的 numFrames 增量器增加的速度进行比较,则帧速率很容易为 25-30 fps。

我似乎无法弄清楚为什么会有这样的差异。我在下面发布了我的 CalcuateFrameRate 方法

clock_t lastTime;
int numFrames;

//GLUT Setup callback
void Renderer::Setup()
{
numFrames = 0;
lastTime = clock();
}

//Called in Display() callback every time I call glutPostRedisplay()
void CalculateFrameRate()
{
clock_t currentTime = clock();
double diff = currentTime - lastTime;
double seconds = diff / CLOCKS_PER_SEC;
double frameRate = 1.0 / seconds;
std::cout<<"FRAMERATE: "<<frameRate<<endl;

numFrames ++;
std::cout<<"NUM FRAMES: "<<numFrames<<endl;
lastTime = currentTime;
}

最佳答案

clock 函数(Windows 除外)为您提供 CPU 时间使用,因此如果您没有在整个帧时间内旋转 CPU,那么它给您的时间会比预期的。相反,如果您有 16 个核心运行 16 个线程,则 clock 报告的时间将是实际时间的 16 倍。

您可以使用 std::chrono::steady_clockstd::chrono::high_resolution_clock,或者如果您使用的是 Linux/Unix,gettimeofday(它给你微秒分辨率)。

以下是如何使用 gettimeofday 测量毫秒的几个片段:

double time_to_double(timeval *t)
{
return (t->tv_sec + (t->tv_usec/1000000.0)) * 1000.0;
}

double time_diff(timeval *t1, timeval *t2)
{
return time_to_double(t2) - time_to_double(t1);
}

gettimeofday(&t1, NULL);
... do stuff ...
gettimeofday(&t2, NULL);
cout << "Time taken: " << time_diff(&t1, &t2) << "ms" << endl;

这里有一段代码展示了如何使用std::chrono::high_resolution_clock:

auto start = std::chrono::high_resolution_clock::now();
... stuff goes here ...
auto diff = std::chrono::high_resolution_clock::now() - start;
auto t1 = std::chrono::duration_cast<std::chrono::nanoseconds>(diff);

关于c++ - 使用 clocks_per_sec 计算过剩帧率太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273069/

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