我想知道如何使用boost线程捕获信号。我知道如何使用pthreads做到这一点,但无法在boost中找到解决方案。
我想在线程中捕获错误异常信号,比如 - sigsegv等,这样如果一个线程出现此错误,整个程序就不会崩溃。
我总是可以直接使用底层的pthread库来做这件事,但是想知道在boost::thread
中是否有一种可移植的方法。
答案 0 :(得分:2)
您的流程在收到SEGV
信号后无法reliably恢复执行。如果您的程序必须在这种情况下继续运行,请将有问题的代码放在一个单独的进程中,并通过IPC进行通信。也就是说,在provides库中提升boost-asio一个很好的集成signal_set
来处理信号。
void handler(
const boost::system::error_code& error,
int signal_number
)
{
if (!error)
{
// A signal occurred.
}
}
...
// Construct a signal set registered for process termination.
boost::asio::signal_set signals(io_service, SIGINT, SIGTERM);
// Start an asynchronous wait for one of the signals to occur.
signals.async_wait(handler);