2016-08-17 20 views
5

Trong khi đọc tài liệu của coroutine2 Tôi tìm thấy một đẹp snippet mã cho thấy làm thế nào để sử dụng nó với asiotăng ASIO và gương coroutine2

Để tham khảo ở đây là mã từ tài liệu:

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"; 
    } 
} 

Tuy nhiên Tôi không thể tìm thấy ví dụ hoạt động trên tài liệu asio và cố gắng biên dịch đoạn mã này trên coliru cho tôi lỗi trình biên dịch liên quan đến yield

Bạn có biết thực thi máy khách/máy chủ tối thiểu sử dụng coroutine2 như được hiển thị trong ví dụ ở trên?

Trả lời

5

AFAIK boost.asio chỉ hỗ trợ boost.coroutine, không boost.coroutine2

+0

ví dụ trong tài liệu coroutine2 là gây hiểu lầm sau đó. Đó là quá xấu, nó sẽ là tuyệt vời để có nó hỗ trợ. –

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - [Từ đánh giá] (/ review/low-quality-posts/14285746) – kiamlaluno

+3

@kiamlaluno với tôi, nó trả lời câu hỏi này – Danh

3

Một ví dụ Boost.Asio dựa trên máy chủ sử dụng coroutines được đưa ra here.

Ví dụ được hiển thị trong tài liệu Boost.Coroutine thiếu phần boost::asio::spawn được sử dụng để tạo một yield_context có thể được chuyển thành bộ xử lý không đồng bộ.

Bằng cách theo chuỗi #include trong vòng <boost/asio/spawn.hpp>, dường như chỉ bao gồm Boost.Coroutine v1.

Các vấn đề liên quan