Boost.Asioタイマ使用例

2752 ワード

目的
タイマー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;

//     
void test_deadline_timer()
{
    io_service io;

    //    deadline   ,  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:");
}

出力は次のようになります.
before wait:2017-01-16 18:02:25 after wait:2017-01-16 18:02:30
見られるwait到着時刻まで終了.
ひどうきタイマ
簡単に言えば、最後まで操作を実行する時点を設定しますが、現在は直接実行できます.
//     
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();
}

出力は次のようになります.
before async_wait:2017-01-16 18:02:30 after async_wait:2017-01-16 18:02:30 wait finished:2017-01-16 18:02:35 async_waitインターフェースが直接戻ってくるのが見えますが、ポイントが到着するとコールバックが呼び出されます.
その他
有効期限の指定方法
  • expires_from_now( ) timer.expires_from_now(boost::posix_time::seconds(5));
  • expires_at( ) timer.expires_at(timer.expires_at()+boost::posix_time::seconds(5));

  • 取得期限expires_from_now()現在の時点から有効期限までの間隔を取得する方法.例えば、有効期限を取得するまでの距離は現在何秒ですか.
    std::cout<
    basic_waitable_timer Boost.Asioで提供されているhigh_resolution_timersteady_timersystem_timerは、いずれもwaitable_timerに属しており、使用形態は全く同じであり、std::chronoで提供されている3種類の時計に1つずつ対応している.deadline_timerwaitable_timerの差
    Difference betweendeadline_timerandwaitable_timerinboost asio簡単に言えばクロックの違い以外は同じdeadline_timer採用クロックはboost::posix_time::ptimeというUTCクロックです.