SDL_Event,队列填充太快

时间:2017-05-01 14:21:18

标签: c events queue sdl

我正在使用SDL2制作应用程序,我在Windows下开发它,一切运行良好,然后我想在Linux下编译它。

我注意到当我做一个事件和事件被我的程序处理之间有一个很大的滞后(几秒)。经过一些调查,我发现鼠标运动比在Windows上更快地填充sdl事件的队列,然后我的程序必须考虑每次调用SDL_pollEvent后遇到的每个事件。

那么有没有办法限制队列的大小,或忽略一些鼠标运动事件,或者你有什么干净的解决方案可以给我?

1 个答案:

答案 0 :(得分:0)

好吧,我通过以下方式解决了我的问题,我发布它也许它可以帮助其他人:

void reduce_queue(){
  static SDL_Event ev[MAX_EVENT_QUEUE + 1];
  static int i;
  static count;

  for(i = 0; i < MAX_EVENT_QUEUE && SDL_PollEvent(&ev[i]); i++);

  count = i;

  while(SDL_PollEvent(&ev[MAX_EVENT_QUEUE]));

  for(i = 0; i < count; i++){
    SDL_PushEvent(&ev[i]);
  }
}

在每次调用SDL_PollEvent或SDL_WaitEvent之前调用此函数。