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

问题描述 投票:0回答:2

我有一个 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中,但跨平台解决方案当然更好).

c++ console signals wxwidgets
2个回答
0
投票

您不能使用

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

wxWidgets 在 Unix 端口中具有私有(即未记录,易于更改)

wxApp::SetSignalHandler()
,它实现了正确的信号处理,处理程序本身只是唤醒事件循环并告诉它等待信号。如果您除了在信号处理程序中设置标志之外还做了其他任何事情,那么您也应该这样做。


0
投票

将近 8 年后......对于任何旅行者。

我在 OnSignal 函数末尾添加了 exit(sig)。

© www.soinside.com 2019 - 2024. All rights reserved.