SDL2事件回调,无需轮询

时间:2018-10-07 09:19:54

标签: c++ event-handling sdl-2

是否可以使用SDL _ EventWatch / Filter而不轮询新事件?

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

 int SDLCALL watch(void *userdata, SDL_Event* event) {
        std::cout << event->type << "\n";
    return 1; // or 0
}

int main( ){
    SDL_Window *window {SDL_CreateWindow("Window", 100, 100, 400, 400, 0)};
    SDL_Renderer* renderer {SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED)};

    SDL_SetEventFilter(watch, NULL);

    function.Call("main"); // non-C++ function with endless loop

    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

"main"中已经存在一个无限循环,该循环控制着大多数应用程序。然后,我将根据赋予watch(..)的SDL_Event来调用适当的Lua函数。

此代码对任何事件均不响应。

1 个答案:

答案 0 :(得分:0)

如Gerhard Stein博士在评论中所述:

  

如果正在运行循环,则必须以某种方式使SDL有机会处理事件。

所以答案就是