簡體   English   中英

wxWidgets C ++控制台應用程序:如何捕獲INT / TERM信號?

[英]wxWidgets C++ console application: how to capture INT/TERM signals?

我有一個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中,但是跨平台解決方案當然更好)

您不能使用cout也不能從信號處理程序中退出應用程序,因此盡管我不知道為什么根本沒有為您調用它,但情況只會變得更糟,而不是更好。

wxWidgets在Unix端口中具有私有的(即未記錄的,易於更改) wxApp::SetSignalHandler()實現正確的信號處理,而處理程序本身只是喚醒事件循環並告訴它等待信號。 如果您不只是在信號處理程序中設置標志,還要做其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM