五、信号处理

Asio使用叫作signal_set的类支持信号处理。程序可能会向集合中添加一个或多个信号,然后执行async_wait()操作。当一个信号发生时就会采用指定的处理器。相同的信号编号可以注册到多个signal_set对象,但是信号编号只能用于 Asio。

void handler(
    const boost::system::error_code& error,
    int signal_number)
{
  if (!error)
  {
    // A signal occurred.
  }
}

...

// 构造一个为进程终止的信号集。
boost::asio::signal_set signals(io_context, SIGINT, SIGTERM);

// 启动一个异步等待信号的出现。
signals.async_wait(handler);

信号处理也适用于 Windows,因为 Microsoft Visual C++ 运行时库将 Ctrl+C 等控制台事件映射到等效信号。

上一篇:《OSTEP》第30章条件变量


下一篇:python/java 中使用split()分割字符串时第一个字符乱码问题