在SDL_Quit()之后,将中断csignal控制返回Qt

时间:2015-08-20 23:54:27

标签: c++ linux qt qt4 sdl

我正在开发一个程序,只需要使用SDL就可以在需要时获取屏幕分辨率。我想启动SDL init,得到我需要的东西,然后关闭它。但我遇到了麻烦,因为当我启动SDL接管单个中断句柄时,我甚至无法将其设置为SIG_IGN ......

我有一个main方法可以创建QApplicationmainWidget

运行时,mainWidget中的函数使用以下代码启动SDL实例:

bool MainWidget::getSomeSdlInformation()
{
    SDL_SetHint(SDL_HINT_RENDER_DRIVER, "software");
    SDL_SetMainReady();
    SDL_Init(0);
    if (SDL_Init(SDL_INIT_VIDEO) != 0)
    {
        qDebug() << "SDL_Init failed: " << QString::fromUtf8(SDL_GetError());
        SDL_Quit();
        return false;
    }
    signal(SIGINT, SIG_DFL);

   // Get the needed video information

   // Quit SDL
   SDL_Quit();
   return true;
}

在我“退出SDL”之后,我想将csignal中断返回给QT,这样当用户按下control-c时,程序会正常关闭。

我在确定如何将手柄的控制权返回QT时遇到了一些麻烦。

以下是在现有实现上执行control-c操作的崩溃日志:

Program received signal SIGSEGV, Segmentation fault.
__GI___pthread_mutex_lock (mutex=0x7fffffffd2f0) at ../nptl/pthread_mutex_lock.c:66

66  ../nptl/pthread_mutex_lock.c: No such file or directory.

(gdb)bt

#0  __GI___pthread_mutex_lock (mutex=0x7fffffffd2f0) at ../nptl/pthread_mutex_lock.c:66

#1  0x00007ffff48070da in XrmQGetResource () from /usr/lib/x86_64-linux-gnu/libX11.so.6

#2  0x00007ffff47e4a42 in XGetDefault () from /usr/lib/x86_64-linux-gnu/libX11.so.6

#3  0x00007ffff43ab0d0 in _XcursorGetDisplayInfo () from /usr/lib/x86_64-linux-gnu/libXcursor.so.1

#4  0x00007ffff43ab1a9 in XcursorGetDefaultSize () from /usr/lib/x86_64-linux-gnu/libXcursor.so.1

#5  0x00007ffff43ad435 in XcursorLibraryLoadCursor () from /usr/lib/x86_64-linux-gnu/libXcursor.so.1

#6  0x00007ffff706ed5c in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4

#7  0x00007ffff706f485 in QCursor::handle() const () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4

#8  0x00007ffff707b364 in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4

#9  0x00007ffff7080398 in QWidgetPrivate::create_sys(unsigned long, bool, bool) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4

#10 0x00007ffff703231d in QWidget::create(unsigned long, bool, bool) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4

#11 0x00007ffff703a86a in QWidget::setVisible(bool) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4

#12 0x0000000000421270 in show (this=0x7fffffffda60) at /usr/include/qt4/QtGui/qwidget.h:497

#13 main (argc=1, argv=) at /home/jeff/Dev/openmw/apps/launcher/main.cpp:55

0 个答案:

没有答案