20 Mart 2018 Salı

asio io_context Sınıfı

Constructor
Şöyle yaparız.
boost::asio::io_context ioc;
Constructor - int
Şöyle yaparız.
auto const threads = 1;

boost::asio::io_context ioc { threads };
BOOST_ASIO_CONCURRENCY_HINT_UNSAFE değeri için açıklaması şöyle.
This special concurrency hint disables locking in the reactor I/O. This hint has the following restrictions:
— Care must be taken to ensure that run functions on the io_context, and all operations on the context's associated I/O objects (such as sockets and timers), occur in only one thread at a time.
run metodu
Şöyle yaparız.
ioc.run();
run_one metodu
Bu metod handler içinden de çağrılabilir. Şöyle yaparız.
struct NestedHandler
{
  NestedHandler(std::string name, asio::io_service * service) :
    name(name),service(service)
  {...}

  void operator()()
  {
    std::cout << " { ";
    std::cout << name;

    std::cout << " ...calling poll again... ";
    service->poll();
    std::cout << " } ";

  }

  std::string name;
  asio::io_service * service;
};
Daha sonra diğer handler'ları yazarız. Şöyle yaparız.
struct DefaultHandler
{
  DefaultHandler(std::string name) :
    name(name)
  {...}

  void operator()()
  {
    std::cout << " { ";
    std::cout << name;
    std::cout << " } ";
  }

  std::string name;
};

int main()
{
  asio::io_service service;
  service.post(NestedHandler("N",&service));
  service.post(DefaultHandler("A"));
  service.post(DefaultHandler("B"));
  service.post(DefaultHandler("C"));
  service.post(DefaultHandler("D"));

  std::cout << "asio poll" << std::endl;
  service.poll();

   return 0;
}

// Output:
asio poll
 { N ...calling poll again...  { A }  { B }  { C }  { D }  } 
Çıktı olarak şunu alırız
asio poll
 { N ...calling poll again...  { A }  { B }  { C }  { D }  } 





Hiç yorum yok:

Yorum Gönder