SDL:窗口冻结

SDL: Window freezes

本文关键字:冻结 窗口 SDL      更新时间:2023-10-16

我想开始从事 SDL 工作。我得到了一个示例代码,看看它是否正常工作。编译时我没有收到任何错误,但是当我运行它时,窗口会显示,但程序冻结直到延迟时间结束。我是新手,所以我真的很感激一些帮助。

int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window *window = 0;
window = SDL_CreateWindow("Hello World!",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        640, 480,
        SDL_WINDOW_SHOWN);
SDL_Delay(10000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;

}

正如@HolyBlackCat所提到的,你需要一个事件循环:https://wiki.libsdl.org/SDL_PollEvent

它应该看起来像这样:

while (true) {
    SDL_Event event;
    while (SDL_PollEvent(&event)) {
        /* handle your event here */
    }
    /* do some other stuff here -- draw your app, etc. */
}

编辑
您需要将延迟替换为事件循环。相反,您可以关闭事件的应用程序。您至少可以/应该做的是处理SDL_QUIT事件,该事件在用户尝试关闭窗口时发送:

while (!quit) {
    SDL_Event event;
    while (SDL_PollEvent(&event)) {
        /* handle your event here */
       //User requests quit
        if( event.type == SDL_QUIT )
            quit = true;
    }
    /* do some other stuff here -- draw your app, etc. */
}