SDL 2 在轮询事件时挂起

SDL 2 hangs when polling for events

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

问题是当我尝试捕获事件时,window 挂起。没有响应,100% CPU 使用率,我必须终止进程。单击 "x" 没有任何效果。 我写了一个简单的测试代码来找出问题所在,但我真的不知道该怎么做。它看起来像内部 "printf" 它从未达到过。

此外,如果我删除事件循环,则会达到 SDL_Quit()(无需终止进程),它会给我一个 "Segmentation fault".

#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();

尝试:

#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

我得到一个 window,它会在您按下某个键时弹出并消失。显然还有更多工作要做...

你看过这么好的教程吗?

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