昨日の記事「boost::asio::deadline_timerは複数のタイマーを持てる」は誤りでした。
タイマーはひとつのインスタンスでひとつしか設定できず、複数設定できるのはasync_waitによる複数ハンドラの待機でした。
以下では、on_timerを2回async_waitしてるので、2秒後に2回on_timerが呼ばれます。
#include <iostream> #include <string> #include <ctime> #include <boost/asio.hpp> #include <boost/format.hpp> namespace asio = boost::asio; std::string now() { std::time_t t; std::time(&t); std::tm* st = std::localtime(&t); return (boost::format("%1%/%2%/%3% %4%:%5%:%6% : ") % (1900 + st->tm_year) % (1 + st->tm_mon) % st->tm_mday % st->tm_hour % st->tm_min % st->tm_sec ).str(); } void on_timer(const boost::system::error_code& error) { std::cout << now() << error.message() << std::endl; } int main() { asio::io_service io_service; asio::deadline_timer timer(io_service); std::cout << now() << "start" << std::endl; timer.expires_from_now(boost::posix_time::seconds(2)); timer.async_wait(on_timer); timer.async_wait(on_timer); io_service.run(); }
2011/6/29 9:53:35 : start 2011/6/29 9:53:37 : この操作を正しく終了しました。 2011/6/29 9:53:37 : この操作を正しく終了しました。