[英]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.