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 等控制台事件映射到等效信号。