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
相关产品推荐
相关产品推荐

