轮询事件时,SDL 2挂起

时间:2017-05-09 16:30:38

标签: c linux sdl sdl-2

我正在开发一个简单的GUI,我正在尝试使用SDL库但收效甚微。我正在使用C语言开发,我无法切换到C ++。 我在Linux工作站(Red Hat Enterprise Server 5(Tikanga))上使用SDL 2.0.5。

问题在于,当我尝试捕捉事件时,窗口会挂起。没有响应,100%的CPU使用率,我要杀死这个过程。单击“x”无效。 我写了一个简单的测试代码来找出问题,但我真的不知道该怎么做。它看起来像是从未到过的内在“printf”。

此外,如果我删除事件循环,则达到SDL_Quit()(无需终止进程),它会给我一个“分段错误”。

#include <SDL.h>
#include <SDL_events.h>

SDL_Window *mainWin;
SDL_Event mainEv;
int quit = 0;

if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
  printf("Init error.\n");
  return(1);
}

mainWin = SDL_CreateWindow("Title", 0, 0, 640, 480, 0);

while(!quit)
{
  while(SDL_PollEvent(&mainEv))
  {
    printf("Event!\n");
    switch(mainEv.type)
    {
      case SDL_KEYDOWN:
        quit=1;
    }
  }
}

SDL_Quit();

1 个答案:

答案 0 :(得分:1)

尝试:

#include <SDL2/SDL.h>
//#include <SDL_events.h>

int main(void)
{   SDL_Window *mainWin;
    ...
    ... // same up to:
    ...
      case SDL_KEYDOWN:
        quit = 1;
    ...
    SDL_Quit();
}

我将您的代码粘贴到“ sdl_t.c ”中,因此将其编译为:

gcc sdl_t.c `sdl2-config --libs --cflags` -o sdl_t

当你按一个键时,我会弹出一个窗口然后消失。显然还有更多事情要做......

你见过这个好教程吗?

http://www.willusher.io/pages/sdl2/