Ste*_*e S 10
控制台上的Ctrl-C生成SDL_QUIT事件.您可以使用SDL_PollEvent或SDL_WaitEvent监视此事件,并在检测到时(干净地)退出.
请注意,其他操作可以生成SDL_QUIT事件(例如,尝试通过窗口管理器关闭主窗口).
在 SDL_quit.c 中,检查提示以确定信号处理程序是否不应在SDL_QuitInit()
. 不确定当提出最初的问题时这是否存在于旧版本中,但对于那些刚来到这里的人来说可能很方便。
刚刚在我的 Windows 应用程序上进行了测试,我现在可以使用以下命令再次正确接收所有信号:
SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1");
SDL_Init(...);
Run Code Online (Sandbox Code Playgroud)
我找到了答案:
SDL_INIT_NOPARACHUTE标志将捕获致命信号,以便SDL可以自行清理.它适用于像SIGSEGV这样的东西,但显然SIGINT不够致命.
我的解决方案是在初始化SDL后将信号处理程序重置为SIGINT:
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);
signal(SIGINT, SIG_DFL);
Run Code Online (Sandbox Code Playgroud)
谢谢你输入缓存,它让我走在正确的轨道上.
迈克尔