提升线程和信号处理能力

时间:2014-05-27 07:10:08

标签: c++ multithreading boost signals boost-thread

我想知道如何使用boost线程捕获信号。我知道如何使用pthreads做到这一点,但无法在boost中找到解决方案。

我想在线程中捕获错误异常信号,比如 - sigsegv等,这样如果一个线程出现此错误,整个程序就不会崩溃。

我总是可以直接使用底层的pthread库来做这件事,但是想知道在boost::thread中是否有一种可移植的方法。

1 个答案:

答案 0 :(得分:2)

您的流程在收到SEGV信号后无法reliably恢复执行。如果您的程序必须在这种情况下继续运行,请将有问题的代码放在一个单独的进程中,并通过IPC进行通信。也就是说,在provides库中提升一个很好的集成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);