Boost 1.47.0から、Boost.Asioにシグナルをハンドリングするためのsignal_setというクラスが導入されました。
以下は、コンソールのキャンセル(Ctrl + C)をハンドリングする例です。
signal_setのコンストラクタにハンドリングしたいシグナルを登録します。
ここでは、コンソールのキャンセルであるSIGINTを登録しています。
#include <iostream> #include <boost/asio.hpp> namespace asio = boost::asio; void on_cancel_signal(const boost::system::error_code& error, int signal_number) { if (!error && signal_number == SIGINT) std::cout << "on cancel signal" << std::endl; } int main() { asio::io_service io_service; asio::signal_set signals(io_service, SIGINT); signals.async_wait(on_cancel_signal); io_service.run(); }
この例では、実行中にCtrl + Cを押すと、ハンドラが呼ばれてプログラムが終了します。
参照:
Signal Handling - Boost Asio Library
signal - MSDN