wxWidgets C ++控制台应用程序:如何捕获INT / TERM信号?

时间:2016-01-31 12:40:28

标签: c++ console signals wxwidgets

我有一个wxWidgets控制台应用程序,我需要处理SIGINT / SIGTERM信号以正确关闭程序。

我尝试过“经典”信号处理,但它不起作用:

#include <signal.h>

bool MainApp::OnInit()
{   // terminate gracefully:
    // term threads, wait them for terminate, etc.
}

static void OnSignal(int sig)
{   // captured signal:
    cout<<"Terminating...\r\n";
    wxGetApp().OnExit();
}

bool MainApp::OnInit()
{
    // init app here, create working threads, etc.
    // set own handler:
    cout<<"Signal set handler result: "<<signal(SIGINT,OnSignal);// returns 0
    return true;// app inited successfully
}

当我发送SIGINT或SIGTERM信号时(使用集成的CodeLite终端进行调试),没有任何反应。

看起来wxWidgets仍然没有信号处理 - 至少,我在文档中没有找到任何内容。

问题是:如何捕获INT / TERM信号? (至少在Linux中,但跨平台解决方案当然更好)

1 个答案:

答案 0 :(得分:0)

你不能使用cout也不能从信号处理程序退出应用程序,所以虽然我不知道为什么它根本不会被你调用,但事情只会是更糟糕的是,不是更好,如果是的话。

wxWidgets在Unix端口中具有私有(即无证,易于更改)wxApp::SetSignalHandler(),它实现了正确的信号处理,处理程序本身只是唤醒事件循环并告诉它等待信号。除了在信号处理程序中设置标志之外,如果你做了什么,那么你也应该这样做。