我无法解决这个问题。还没有机会在另一台PC上进行尝试。
我有一个非常简单的以下代码,用于打开SDL窗口并进入循环。 它打开了窗口,我能够看到该循环正在执行某些操作,例如,我使用增量值对SDL_SetWindowtitle()进行了测试,并看到它不断增长,从而使生命变得更长。
但是,它仍然卡住,无响应。我无法按关闭按钮或移动窗口。在某些情况下,它的寿命很短,并且会“更新”,但又回到无响应状态。
我开始认为我的代码中有一些愚蠢的错误,我只是没有注意到。
代码可以正常编译,警告或错误为零。
我在Windows 10 64位系统上使用MinGW 64位编译器。
#include <SDL2/SDL.h>
int main(int argc, char** argv) {
SDL_Window *window;
SDL_Surface *surface;
SDL_Renderer *renderer;
SDL_Event event;
int WINDOW_WIDTH = 1280;
int WINDOW_HEIGHT = 720;
bool exit = 1;
if (SDL_Init( SDL_INIT_VIDEO ) < 0) {
return 2;
}
window = SDL_CreateWindow("Gui test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN );
if (!window) {
return 3;
}
surface = SDL_GetWindowSurface(window);
if (!surface) {
return 4;
}
exit = false;
while (!exit) {
while(SDL_PollEvent(&event) > 0) {
switch(event.type) {
case SDL_QUIT:
exit = true;
break;
}
SDL_UpdateWindowSurface(window);
SDL_Delay(1000/30);
}
}
return 0;
}
更新: 这似乎是Windows的特定问题。我注意到在启动我的电脑后,一切正常运行了一段时间,但是过了一段时间,由于某种原因,问题再次出现。在家里的Linux上我的问题是零。
TLDR:某些原因导致计算机在Windows上启动后不久,SDL无法正常工作。
UPDATE2: 没有任何事件处理窗口绘制完美。测试了简单的渲染器和背景颜色变化。但是,一旦实现任何事件处理功能(甚至是SDL_PumpEvents(0)),窗口就会冻结,并且大约需要5到10秒钟,直到渲染背景为止。它似乎挂在事件处理上。