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

SDL窗口点击关闭时无响应问题求助(附C语言代码)

问题原因

你的代码里的while(1)是个空死循环,完全没处理SDL的事件队列。操作系统发送的窗口关闭、交互等事件都需要SDL去读取并响应,你的循环根本没做这件事,所以系统判定窗口无响应。

修复后的代码
#include <SDL2/SDL.h>
#undef main
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_timer.h>

int main(int argc, char* argv[])
{
    // 初始化SDL,失败则打印错误并退出
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        printf("error initializing SDL: %s\n", SDL_GetError());
        return 1;
    }
    // 创建窗口,检查是否创建成功
    SDL_Window* win = SDL_CreateWindow("GAME",
        SDL_WINDOWPOS_CENTERED,
        SDL_WINDOWPOS_CENTERED,
        1280, 720, 0);

    if (!win) {
        printf("error creating window: %s\n", SDL_GetError());
        SDL_Quit();
        return 1;
    }

    SDL_Event event;
    int running = 1;
    while (running)
    {
        // 持续轮询并处理所有待处理事件
        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT) {
                running = 0; // 捕获窗口关闭事件,标记退出循环
            }
            // 可在此添加键盘、鼠标等其他事件的处理逻辑
        }

        // 可在此添加游戏更新、画面渲染等逻辑
    }

    // 清理资源
    SDL_DestroyWindow(win);
    SDL_Quit();
    return 0;
}
关键说明
  • SDL_PollEvent(&event):这是窗口能响应系统操作的核心,它会持续从SDL事件队列中取出待处理的事件,必须在主循环中调用。
  • 捕获SDL_QUIT事件:当用户点击窗口关闭按钮时,系统会触发该事件,我们通过设置running = 0来终止主循环。
  • 资源清理:退出循环后必须销毁窗口并调用SDL_Quit(),避免资源泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:45:03