Boost.Asioタイマーの使用例



Boost Asio Timer Usage Example



目的

タイマーの使い方は次のとおりですboost::asio::deadline_timer対応するboost::asio::basic_waitable_timerおよびいくつかの関連コンテンツを簡単に紹介します。

前書き

タイマーを使用して、一定期間待機してから後続のアクションを実行できますBoost.Asioこれを行うには、同期と非同期の2つの方法があり、特定のクロックを使用するように指定できます。



ヘルパー関数show_current_time

この関数は、同期非同期を検証するための現在の時刻を表示するために使用されます。

#include #include #include void show_current_time(const char* what) { auto time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()) std::cout<

同期タイマー

簡単に言えば、指定された時間に達するまで待つだけです。



#include 'boost/asio.hpp' using namespace boost::asio //synchronization timer void test_deadline_timer() { io_service io / / Construct a deadline timer, wait until 5s deadline_timer timer(io) timer.expires_from_now(boost::posix_time::seconds(5)) show_current_time('before wait:') timer.wait() show_current_time('after wait:') }

出力は次のようになります。

待つ前に:2017-01-16 18:02:25
待機後:2017-01-16 18:02:30

見ることができますwait到着時まで終了します。



非同期タイマー

簡単に言えば、操作の終了後に時点を設定することですが、直接続行することもできます。

//Asynchronous timer void test_async_deadline_timer() { io_service io deadline_timer timer(io) timer.expires_from_now(boost::posix_time::seconds(5)) show_current_time('before async_wait:') timer.async_wait([](const boost::system::error_code& ec){ if(!ec) show_current_time('wait finished:') }) show_current_time('after async_wait:') io.run_one() }

出力は次のようになります。

async_wait:2017-01-1618:02:30の前
async_wait:2017-01-1618:02:30の後
終了待ち:2017-01-16 18:02:35

見ることができますasync_waitインターフェースは直接戻りますが、時間が経過した後にコールバックが呼び出されます。

その他

有効期限の方法を指定します

  • Expires_from_now (time interval)
    timer.expires_from_now(boost::posix_time::seconds(5))
  • Expires_at (time point)
    timer.expires_at(timer.expires_at()+boost::posix_time::seconds(5))

有効期限を取得する

expires_from_now()このメソッドは、現在の時点から有効期限までの時間間隔(有効期限が現在何秒であるかなど)を取得するために使用されます。

std::cout<<'expire after '<< timer.expires_from_now().total_seconds()<<'s '

basic_waitable_timer

in Boost.Asio提供in high_resolution_timersteady_timersystem_timerすべてがwaitable_timerに属し、まったく同じように使用され、std::chrono 3つのクロック1対1の対応で提供されます。

deadline_timerwaitable_timer違い

deadline_timerwaitable_timerの違いboost asio
一言で言えば、時計以外はすべて同じです。deadline_timer使用される時計はboost::posix_time::ptime UTC時計です。