Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
You've currently chosen the 1.89.0 version. If a newer release comes out, you will continue to view the 1.89.0 version, not the new latest release.
The 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 : boost::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()(boost::system::error_code ec = boost::system::error_code(), std::size_t n = 0) { if (!ec) reenter (this) { for (;;) { yield socket_->async_read_some(boost::asio::buffer(*buffer_), *this); yield boost::asio::async_write(*socket_, boost::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 coroutine class's documentation
provides a complete description of these pseudo-keywords.