2016-08-17 28 views
5

coroutine2 belgelerine okuma Burada Başvuru için asioboost asio ve coroutine2 örnek

ile nasıl kullanılacağını gösterir kod güzel snippet belgelerinden kod buldum iken: Ancak

void session(boost::asio::io_service& io_service){ 
    // construct TCP-socket from io_service 
    boost::asio::ip::tcp::socket socket(io_service); 

    try{ 
     for(;;){ 
      // local data-buffer 
      char data[max_length]; 

      boost::system::error_code ec; 

      // read asynchronous data from socket 
      // execution context will be suspended until 
      // some bytes are read from socket 
      std::size_t length=socket.async_read_some(
        boost::asio::buffer(data), 
        boost::asio::yield[ec]); 
      if (ec==boost::asio::error::eof) 
       break; //connection closed cleanly by peer 
      else if(ec) 
       throw boost::system::system_error(ec); //some other error 

      // write some bytes asynchronously 
      boost::asio::async_write(
        socket, 
        boost::asio::buffer(data,length), 
        boost::asio::yield[ec]); 
      if (ec==boost::asio::error::eof) 
       break; //connection closed cleanly by peer 
      else if(ec) 
       throw boost::system::system_error(ec); //some other error 
     } 
    } catch(std::exception const& e){ 
     std::cerr<<"Exception: "<<e.what()<<"\n"; 
    } 
} 

Asio belgelerinde çalışan bir örnek bulamıyorum ve bu snippet'i derlemeye çalışırken derleyici hatalarımı derledim yield

Yukarıdaki örnekte gösterildiği gibi coroutine2 kullanan bir minimum istemci/sunucu uygulaması?

cevap

5

AFAIK boost.asio

+0

coroutine2 belgesindeki örnek yanlış yönlendiricidir. Bu çok kötü, desteklenmesini sağlamak harika olurdu. –

+0

Bu, sorunun cevabını sağlamaz. Bir yazardan eleştiri yapmak veya açıklama istemek için yazılarının altında bir yorum bırakın. - [Yorum yaz] [/ review/düşük kaliteli-mesajlar/14285746) – kiamlaluno

+3

@kiamlaluno bana, bu soruya cevap veriyor – Danh

3

sunucusu here verilir coroutines kullanılarak Boost.Asio tabanlı bir örnek boost.coroutine2 değil, sadece boost.coroutine destekler.

Boost.Coroutine belgelerinde gösterilen örnek, 'un bir zamanuyumsuz işleyici olarak iletilebilen bir yield_context oluşturmak için kullanıldığı kısımda eksik.

<boost/asio/spawn.hpp> içindeki #include zincirini takip ederek, yalnızca Boost.Coroutine v1'iniz var gibi görünüyor.

İlgili konular