在我的所有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;
}
答案 0 :(得分:1)
我认为您应该使用SDL_GetTicks()设置start_time,而不是在进入主循环之前将其设置为零。 SDL_GetTicks()返回自SDL_Init()以来的时间,此时它可能不是零。