Boost.Asio 使用名为 signal_set 的类支持信号处理。程序可以向集合中添加一个或多个信号,然后执行 async_wait()
操作。当其中一个信号发生时,将调用指定的处理程序。同一个信号编号可以注册到多个 signal_set 对象中,但是该信号编号只能与 Boost.Asio 一起使用。
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_context, SIGINT, SIGTERM); // Start an asynchronous wait for one of the signals to occur. signals.async_wait(handler);
信号处理在 Windows 上也能工作,因为 Microsoft Visual C++ 运行时库将 Ctrl+C 等控制台事件映射到等效的信号。