Boost.Asioにはこれまでdeadline_timerというBoost.DateTimeのposix timeベースのタイマーがありましたが、Boost 1.49.0からBoost.Chronoベースの以下のタイマーが導入されました:
- basic_waitable_timer : クロックの切り替え用
- system_timer : system_clockでのタイマー
- steady_timer : steady_clockでのタイマー
- high_resolution_timer : high_resolution_clockでのタイマー
また、basic_waitable_timerのテンプレート引数として渡すクロック型が満たすべき要件を定義するためのwait_traitsという型も追加されています。
この新タイマーの使い方としては以下のようになります:
#include <iostream> #include <boost/asio.hpp> #include <boost/asio/steady_timer.hpp> namespace asio = boost::asio; namespace chrono = boost::chrono; void on_timer(const boost::system::error_code& ec) { if (!ec) { std::cout << "on timer" << std::endl; } } int main() { asio::io_service io_service; asio::steady_timer timer(io_service); // chronoベースのタイマー timer.expires_from_now(chrono::milliseconds(100)); // chronoのdurationを渡す timer.async_wait(on_timer); io_service.run(); }
これを実行すると、100ミリ秒後に「on timer」と出力されます。