标签: boost-coroutine2


提升asio和coroutine2的例子

在阅读coroutine2我的文档时,我发现了一段很好的代码片段,展示了如何使用它asio

这里的参考是文档中的代码:

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 …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio boost-coroutine boost-coroutine2

7
推荐指数
1
解决办法
3161
查看次数

boost :: coroutine2与CoroutineTS

Boost :: Coroutine2和CoroutineTS(C ++ 20)是C ++中流行的协程实现。两者都暂停和恢复,但是两种实现遵循完全不同的方法。

协程TS(C ++ 20)

  • 无堆叠
  • 暂停返回
  • 使用特殊关键字
generator<int> Generate()
{
   co_yield;
});
Run Code Online (Sandbox Code Playgroud)

boost ::协程2

  • 堆积如山
  • 暂停通话
  • 不要使用特殊关键字
pull_type source([](push_type& sink)
{
   sink();
});
Run Code Online (Sandbox Code Playgroud)

是否有任何我只应选择其中一种的特定用例?

c++ boost coroutine boost-coroutine2

6
推荐指数
1
解决办法
449
查看次数