12 Kasım 2016 Cumartesi

asio io_service work Sınıfı

Giriş
io_service eğer yapacak iş yoksa sonlanır. io_service.run () metodu sonlanmasın istiyorsak work sınıfını kullanırız.

Constructor
Örnek 1
Şöyle yaparız.
boost::asio::io_service ios;
boost::asio::io_service::work w (ios);
Örnek 2
Heap'te yaratmak istersek şöyle yaparız
boost::asio::io_service ios;
auto w = std::make_shared<boost::asio::io_service::work> (ios);
Örnek 3
Şöyle yaparız.
boost::asio::io_service ios;
boost::asio::io_service::work *w = new boost::asio::io_service::work (ios);
Daha sonra bu nesneyi sileriz.
delete w;
Yardımcı Sınıf
work nesnesi yaşadığı müddetçe is_service nesnesi döngüsünden çıkmaz. Tüm işler bittikten sonra döngüden çıkması için yardım bir sınıf kullanırız. Şöyle yaparız.
#include <boost/asio.hpp>
#include <boost/optional.hpp>

struct workutil {
  using io_service = boost::asio::io_service;
  workutil (io_service& ios) :
    m_work (io_service::work (ios)) 
    { }

  void release() {
    m_work.reset();
  }

  void enlist(io_service& ios) {
    m_work.emplace (io_service::work (ios));
  }

private:
  boost::optional<io_service::work> m_work;
};
Şöyle yaparız
boost::asio::io_service ios;
workutil lock (ios);

...

lock.release();

Hiç yorum yok:

Yorum Gönder