【发布时间】:2012-10-08 18:29:04
【问题描述】:
在我的多线程 GUI 应用程序中,我有以下信号处理代码。我想改进这段代码,使其正确且线程安全,但在信号处理中有些事情我并不完全理解:
- 是在进程或线程级别处理信号(我可以有线程特定的信号处理程序)吗?
- signal_handler 函数在哪个线程上下文中执行?
- 是否可以在短时间内发送多个 SIGTERM 信号?
- 使用互斥锁来阻止 signal_handler 的并行执行是否有意义?
void signal_handler(int sig)
{
switch (sig)
{
case SIGTERM:
::wxLogMessage(wxT("SIGTERM signal received ..."));
break;
case SIGINT:
::wxLogMessage(wxT("SIGINT signal received ..."));
break;
case SIGUSR1:
::wxLogMessage(wxT("SIGUSR1 signal received ..."));
break;
default:
::wxLogMessage(wxT("Unknown signal received ..."));
}
// send wxCloseEvent to main application window
::wxGetApp().GetTopWindow()->Close(true);
}
我在我的 init 函数中注册了信号处理程序:
// register signal handlers
signal(SIGTERM, signal_handler);
signal(SIGINT, signal_handler);
signal(SIGUSR1, signal_handler);
【问题讨论】:
标签: c++ c multithreading signal-handling