Winapi:GetTickCount()无法获得ELAPSED TIME

时间:2013-08-19 18:26:32

标签: winapi counter elapsedtime

嗨,我的动画中有一个简单的FPS计数器。 FPS很好,但我不知道为什么我无法测量动画时间。 Normaly我通过glutGet(GLUT ELAPSED TIME)得到了那个时间但是因为我必须去Winapi我想(或必须)使用GetTickCount()这是我的代码:

int Frames=0;
int CurrentTime=0;
int PreviousTime=0;
int IntervalTime=0;
int CounterTime=0;
float FPS;

void fpscount(){
    Frames++;
    CurrentTime = GetTickCount();
    IntervalTime = CurrentTime - PreviousTime;

    if(IntervalTime >= 1000)
    {
        FPS = Frames / (IntervalTime / 1000.0f);
        PreviousTime = CurrentTime;
        Frames = 0;
        CounterTime += IntervalTime;

    }
}

我按行测量:CounterTime += IntervalTime;并得到奇怪的值,例如: 44834406 44835420

如果我将该行定义为CounterTime = IntervalTime+CounterTime;,则CounterTime获取上述值。

如果我将该行定义为CounterTime = IntervalTime;,则CounterTime获取值: 1014 1014 但他们并没有被总结。

正确的值应该是: 1014 2028 。 。

我做错了什么?

4 个答案:

答案 0 :(得分:1)

请改为尝试:

int Frames = 0;
DWORD PreviousTime = 0;
float FPS = 0.0f;

void fpscount()
{
    Frames++;

    DWORD CurrentTime = GetTickCount();
    DWORD IntervalTime = (CurrentTime >= PreviousTime)
        ? (CurrentTime - PreviousTime)
        : ((MAXDWORD - PreviousTime) + CurrentTime);

    if (IntervalTime >= 1000)
    {
        FPS = Frames / (IntervalTime / 1000.0f);
        PreviousTime = CurrentTime;
        Frames = 0;
    }
}

当您第一次开始处理帧时,不要忘记使用当前时间初始化PreviousTime

答案 1 :(得分:0)

我无法遵循你的思维模式,但我这样做是这样的:

int gFpsStartTime;
int gFpsEndTime;
int gFpsFrames;
float gFPS;

void fpscount(){
    if (gFpsEndTime == 0) gFpsEndTime = GetTickCount();
    gFpsStartTime = GetTickCount();
    ++gFpsFrames;
    if (gFpsStartTime - gFpsEndTime > 0) {
        gFPS = gFpsFrames / ((gFpsStartTime - gFpsEndTime) / 1000.0f);
    }
}

这样做的好处是可以给你FPS的分数,从而提供更好的平均值。

答案 2 :(得分:0)

您正在初始化IntervalTime,如下所示:

CurrentTime = GetTickCount();
IntervalTime = CurrentTime - PreviousTime;

但是在第一次迭代时,PreviousTime为0.这意味着在第一次迭代时,IntervalTime被赋予GetTickCount()的值,这是自从PreviousTime以来的毫秒数。系统启动了。

动画开始播放时,您需要将GetTickCount()初始化为{{1}}。

答案 3 :(得分:0)

尝试使用timeGetTime以获得更好的计时器精度。