You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDL2事件轮询疑问:程序启动后窗口为何立即关闭?

你的SDL2程序窗口立即关闭的原因解析

你错在默认认为SDL程序启动时事件队列为空——实际上SDL在窗口创建完成后,会自动向事件队列推送窗口相关的事件,比如SDL_WINDOWEVENT(包含窗口显示、初始化完成等事件类型)。

看你的代码逻辑:

bool looper = true;
int flag = 0;
while (looper)
{
    SDL_Event event;
    while (SDL_PollEvent(&event))
    {
        // any event
        flag = 1;
        if (event.type == SDL_KEYDOWN)
        {
            if (event.key.keysym.sym == SDLK_0)
                looper = false;
        }
    }
    if (flag == 1)
        looper = false;
}

内层的SDL_PollEvent循环会捕获到SDL自动推送的窗口事件,执行flag = 1;随后外层循环检测到flag ==1,直接把looper设为false,整个循环终止,程序退出,窗口自然就立刻关闭了。

如果想让窗口保持显示,你需要调整逻辑:不要捕获任意事件就终止程序,只在你需要的事件(比如用户按0键、点击窗口关闭按钮)触发时才退出。比如可以修改为只处理特定事件:

bool looper = true;
while (looper)
{
    SDL_Event event;
    while (SDL_PollEvent(&event))
    {
        if (event.type == SDL_QUIT)
        {
            looper = false;
        }
        else if (event.type == SDL_KEYDOWN)
        {
            if (event.key.keysym.sym == SDLK_0)
                looper = false;
        }
    }
    // 这里可以添加渲染、窗口更新的逻辑
}

内容的提问来源于stack exchange,提问作者Jenil Mansuriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:42:05