Boost.Asio signal_set

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