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_timer
、steady_timer
、system_timer
すべてがwaitable_timer
に属し、まったく同じように使用され、std::chrono
3つのクロック1対1の対応で提供されます。
deadline_timer
対waitable_timer
違い
deadline_timer
とwaitable_timer
の違いboost asio
で
一言で言えば、時計以外はすべて同じです。deadline_timer
使用される時計はboost::posix_time::ptime
UTC時計です。