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

My SDL2 apps have a severe delay ONLY after the first keyboard input

本文关键字:延迟 输入 键盘 应用程序 SDL2 第一次 我的      更新时间:2023-10-16

在我所有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;
}

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