我正在使用SDL开发一个OpenGL应用程序,在Linux上运行。我的问题是,SDL捕获和忽略了SIGINT信号。这很麻烦,因为我通过一个screen会话进行开发,无法使用CTRL-C终止正在运行的程序(计算机正在运行的程序已连接到投影仪并没有输入设备)。
有没有标志或其他东西可以传递给SDL,以便它不捕获SIGINT信号?我真的希望程序在接收到信号时停止运行(即当我按下ctrl-c时)。
在控制台中按下Ctrl-C会生成一个SDL_QUIT事件。您可以使用SDL_PollEvent或SDL_WaitEvent监视此事件,并在检测到时退出(清除状态)。
请注意,其他操作也可能生成SDL_QUIT事件(例如,尝试通过窗口管理器关闭主窗口)。
SDL_QuitInit()
中不使用信号处理程序。不确定在原始问题提出时是否存在此功能,但对于那些刚接触这个问题的人可能会很有用。SDL_SetHint(SDL_HINT_NO_SIGNAL_HANDLERS, "1");
SDL_Init(...);
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);
signal(SIGINT, SIG_DFL);
SDL_INIT_NOPARACHUTE
初始化标志传递给SDL_Init函数“防止SDL捕获致命信号”。如果由于某些原因您实际上没有使用事件循环,您可以在“轮询内容”循环中使用SDL_QuitRequested
。