Sha256: cb4e72c36c58f3e63939b449b91eccecf0e01fc64e830bd6c44a0c0ac89b46c7
Contents?: true
Size: 1.66 KB
Versions: 24
Compression:
Stored size: 1.66 KB
Contents
[/ / Copyright (c) 2003-2020 Christopher M. Kohlhoff (chris at kohlhoff dot com) / / Distributed under the Boost Software License, Version 1.0. (See accompanying / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) /] [section:coroutine Stackless Coroutines] The [link asio.reference.coroutine `coroutine`] class provides support for stackless coroutines. Stackless coroutines enable programs to implement asynchronous logic in a synchronous manner, with minimal overhead, as shown in the following example: struct session : asio::coroutine { boost::shared_ptr<tcp::socket> socket_; boost::shared_ptr<std::vector<char> > buffer_; session(boost::shared_ptr<tcp::socket> socket) : socket_(socket), buffer_(new std::vector<char>(1024)) { } void operator()(asio::error_code ec = asio::error_code(), std::size_t n = 0) { if (!ec) reenter (this) { for (;;) { yield socket_->async_read_some(asio::buffer(*buffer_), *this); yield asio::async_write(*socket_, asio::buffer(*buffer_, n), *this); } } } }; The `coroutine` class is used in conjunction with the pseudo-keywords `reenter`, `yield` and `fork`. These are preprocessor macros, and are implemented in terms of a `switch` statement using a technique similar to Duff's Device. The [link asio.reference.coroutine `coroutine`] class's documentation provides a complete description of these pseudo-keywords. [heading See Also] [link asio.reference.coroutine coroutine], [link asio.examples.cpp03_examples.http_server_4 HTTP Server 4 example], [link asio.overview.core.spawn Stackful Coroutines]. [endsect]
Version data entries
24 entries across 24 versions & 1 rubygems