我正在将SDL用于在Linux上运行的OpenGL应用程序.我的问题是SDL正在捕获SIGINT并忽略它.这是一个痛苦,因为我正在通过屏幕会话开发,我不能用CTRL-C杀死正在运行的程序(计算机运行的程序连接到投影仪并且没有输入设备).
是否有标志或我可以传递给SDL的东西,以便它不捕获SIGINT?我真的只是希望程序在收到信号时停止(即当我按下ctrl-c时).
控制台上的Ctrl-C生成SDL_QUIT事件.您可以使用SDL_PollEvent或SDL_WaitEvent监视此事件,并在检测到时(干净地)退出.
请注意,其他操作可以生成SDL_QUIT事件(例如,尝试通过窗口管理器关闭主窗口).
我找到了答案:
SDL_INIT_NOPARACHUTE标志将捕获致命信号,以便SDL可以自行清理.它适用于像SIGSEGV这样的东西,但显然SIGINT不够致命.
我的解决方案是在初始化SDL后将信号处理程序重置为SIGINT:
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE); signal(SIGINT, SIG_DFL);
谢谢你输入缓存,它让我走在正确的轨道上.
迈克尔