不带轮询的 SDL2 事件回调

SDL2 event callback without polling

本文关键字:SDL2 事件 回调      更新时间:2023-10-16

是否可以在不轮询新事件的情况下使用 SDL_EventWatch/过滤器?

#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 函数。

此代码不对任何事件做出反应。

正如Gerhard Stein博士在评论中所说:

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

所以答案是否定的