0

我用OpenGL、Qt、C++编写了一个3D模型显示程序。但是我发现了一些奇怪的东西。那就是Release模式版本的FPS(每秒帧数)低于调试模式版本。现在我发布他们的FPS:

左边是调试模式版本,右边是发布模式版本:

在此处输入图像描述 在此处输入图像描述

我用来计算 FPS 的函数是

void displayFPS()
{
    static float framesPerSecond    = 0.0f;       // This will store our fps
    static float lastTime   = 0.0f;       // This will hold the time from the last frame
    float currentTime = GetTickCount() * 0.001f;    
    ++framesPerSecond;
    if( currentTime - lastTime > 1.0f )
    {
        framesPerSecond/=currentTime - lastTime;
        char strFrameRate[256];
        lastTime = currentTime;
        sprintf_s(strFrameRate,256, "FPS : %f", framesPerSecond);
        cout << strFrameRate << endl;
        framesPerSecond = 0;
    }
}

我想知道这是怎么发生的?发布模式不应该比调试模式快吗?有人能告诉我为什么吗?

4

1 回答 1

1

据此, GetTickCount()准确性比毫秒差得多。甚至可能差到 55 毫秒!使用更可靠的方法来测量时间间隔,例如:

#include <windows.h>
#include <cstdint>

typedef std::int64_t int64;

// get duration of a single "clock" in microseconds
double
get_clock_duration()
{
  LARGE_INTEGER f;
  QueryPerformanceFrequency(&f);
  return 1000000.0 / double(f.QuadPart);
}

// get number of elapsed clocks from program start
int64
clocks()
{  
  LARGE_INTEGER t;
  QueryPerformanceCounter(&t);
  return t.QuadPart;
}

// convert a duration in clocks to a duration in milliseconds
double
milliseconds(int64 t)
{
  return get_clock_duration() * double(t) * 0.001;
}
于 2012-07-18T16:15:55.663 回答