我的SDL2应用程序仅在第一次键盘输入后才会出现严重延迟

时间:2018-01-31 19:40:11

标签: c++ sdl sdl-2

在我的所有C ++ SDL2程序中,第一次键盘输入后都会出现严重延迟。在第一次输入之后,其他一切似乎都运行得很好。

即使在最简单的程序中也会发生这种情况。

有什么东西我做错了,还是这个错误?

如果相关,我的操作系统是macOS。

以下是一些有问题的代码:

#include <SDL2/SDL.h>
#include <iostream> 
#include <stdexcept>

int main(int argc, char *argv[])
{
    if(SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        throw std::runtime_error("SDL failed to initialize.\n");
    }

    SDL_Window *window = SDL_CreateWindow("App", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, NULL);

    bool done = false;

    unsigned start_time = 0;
    unsigned tick_time = 0;

    while(!done)
    {
        SDL_Event event;

        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_QUIT)
            {
                done = true;
            }
        }

        start_time = tick_time;

        tick_time = SDL_GetTicks();

        const unsigned delta_time = tick_time - start_time;

        if(delta_time != 0)
        {
            if((1000 / delta_time) < 30)
            {
                std::cout << 1000 / delta_time << '\n';
            }
        }
    }

    SDL_DestroyWindow(window);

    SDL_Quit();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

我认为您应该使用SDL_GetTicks()设置start_time,而不是在进入主循环之前将其设置为零。 SDL_GetTicks()返回自SDL_Init()以来的时间,此时它可能不是零。