Giriş
Şu satırı dahil ederiz.
Handler içinde (eğer error_code atanmamış ise) şöyle yaparız.
Asio timer sınıfları periyodik değiller. Aynı zamanda durdurup tekrar başlatma imkânı da vermiyorlar. Ancak bu metodları yazması kolay. Şöyle yaparız.
t.cancel ();
t.expires_from_now (...);
t.asynx_wait (...);
Constructor
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle
async_wait metodu
Şöyle yaparız.
Başlatılmış bir timer nesnesini iptal etmek içindir. Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include <boost/asio/steady_timer.hpp>
Chrono monotonic saatini kullanır. Daha rahat kullanmak için şu satırı dahil ederiz.using boost::asio::steady_timer;
Bu timer için kullanılan çağıları görmek için şöyle yaparız.#define BOOST_ASIO_ENABLE_HANDLER_TRACKING 1
Çıktıyı görmek için şu uygulamayı kullanırız.boost/libs/asio/tools/handlerviz.plPeriyodik Timer
Handler içinde (eğer error_code atanmamış ise) şöyle yaparız.
void handle_timeout(const boost::system::error_code& ec)
{
if (!ec) {
t.expires_from_now (...); //tekrar kur
t.async_wait (handle_timeout);
}
}
restartAsio timer sınıfları periyodik değiller. Aynı zamanda durdurup tekrar başlatma imkânı da vermiyorlar. Ancak bu metodları yazması kolay. Şöyle yaparız.
t.cancel ();
t.expires_from_now (...);
t.asynx_wait (...);
Constructor
Şöyle yaparız.
boost::asio::io_service ios;
boost::asio::steady_timer t (ios);
Constructor - timeŞöyle yaparız.
steady_timer t {ios, std::chrono::seconds{3}};
DestructorAçıklaması şöyle
It is safe for a timer to be destroyed with outstanding wait operations. The outstanding wait operations will be implicitly cancelled within the timer's destructor.
async_wait metodu
Şöyle yaparız.
t.async_wait([](const boost::system::error_code &ec)
{...});
cancel metoduBaşlatılmış bir timer nesnesini iptal etmek içindir. Şöyle yaparız.
t.cancel();
Handle metodunda hata kontrolu için şöyle yaparız.void handle_timeout(const boost::system::error_code& ec)
{
if (!ec) {
...
}
else if (ec != boost::asio::error::operation_aborted) {
std::cerr "handle_timeout error " << ec.message() << "\n";
}
}
expires_at metoduŞöyle yaparız.
t.expires_at(Timer::clock_type::time_point::min());
expires_from_now metodu - getterŞöyle yaparız.
if(t.expires_from_now() <= std::chrono::seconds(0))
...
}
expires_from_now metodu - setterŞöyle yaparız.
t.expires_from_now (boost::posix_time::seconds(5));
Şöyle yaparız.t.expires_from_now (boost::chrono::seconds(
5));
Şöyle yaparız. Ben hep bu yöntemi kullandım.t.expires_from_now (std::chrono::seconds(
5));
get_io_service metoduŞöyle yaparız.
timer.get_io_service().post([](){
...
});
Hiç yorum yok:
Yorum Gönder