当前位置:  开发笔记 > 编程语言 > 正文

SDL/C++ OpenGL程序,如何阻止SDL捕获SIGINT

如何解决《SDL/C++OpenGL程序,如何阻止SDL捕获SIGINT》经验,为你挑选了2个好方法。

我正在将SDL用于在Linux上运行的OpenGL应用程序.我的问题是SDL正在捕获SIGINT并忽略它.这是一个痛苦,因为我正在通过屏幕会话开发,我不能用CTRL-C杀死正在运行的程序(计算机运行的程序连接到投影仪并且没有输入设备).

是否有标志或我可以传递给SDL的东西,以便它不捕获SIGINT?我真的只是希望程序在收到信号时停止(即当我按下ctrl-c时).



1> Steve S..:

控制台上的Ctrl-C生成SDL_QUIT事件.您可以使用SDL_PollEvent或SDL_WaitEvent监视此事件,并在检测到时(干净地)退出.

请注意,其他操作可以生成SDL_QUIT事件(例如,尝试通过窗口管理器关闭主窗口).



2> MichaelM..:

我找到了答案:

SDL_INIT_NOPARACHUTE标志将捕获致命信号,以便SDL可以自行清理.它适用于像SIGSEGV这样的东西,但显然SIGINT不够致命.

我的解决方案是在初始化SDL后将信号处理程序重置为SIGINT:

SDL_Init(SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE);
signal(SIGINT, SIG_DFL); 

谢谢你输入缓存,它让我走在正确的轨道上.

迈克尔

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有