Boost.Asioタイマ使用例
2752 ワード
目的
タイマー
概要
タイマーは、一定時間待ってから後続の動作を実行するために使用できます.
補助関数
同期タイマ
簡単に言えば、指定された時間まで待つことです.
出力は次のようになります.
before wait:2017-01-16 18:02:25 after wait:2017-01-16 18:02:30
見られる
ひどうきタイマ
簡単に言えば、最後まで操作を実行する時点を設定しますが、現在は直接実行できます.
出力は次のようになります.
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
その他
有効期限の指定方法
取得期限
Difference between
タイマー
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_timer
・steady_timer
・system_timer
は、いずれもwaitable_timer
に属しており、使用形態は全く同じであり、std::chrono
で提供されている3種類の時計に1つずつ対応している.deadline_timer
とwaitable_timer
の差Difference between
deadline_timer
andwaitable_timer
inboost asio
簡単に言えばクロックの違い以外は同じdeadline_timer
採用クロックはboost::posix_time::ptime
というUTCクロックです.