В моем многопоточном графическом приложении у меня есть следующий код обработки сигналов. Я хочу улучшить этот код, чтобы он был корректным и потокобезопасным, но есть некоторые вещи, которые я не совсем понимаю при обработке сигналов:
- - это сигнал, обрабатываемый на уровне процесса или потока (могу ли я иметь обработчики сигналов, специфичные для потока)?
- в котором контекст потока выполняет функцию 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);