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

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
PrevUpHomeNext

spawn

Start a new stackful coroutine.

template<
    typename Handler,
    typename Function>
void spawn(
    Handler handler,
    Function function,
    const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
  » more...

template<
    typename Handler,
    typename Function>
void spawn(
    basic_yield_context< Handler > ctx,
    Function function,
    const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
  » more...

template<
    typename Function>
void spawn(
    boost::asio::io_service::strand strand,
    Function function,
    const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
  » more...

template<
    typename Function>
void spawn(
    boost::asio::io_service & io_service,
    Function function,
    const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
  » more...

The spawn() function is a high-level wrapper over the Boost.Coroutine library. This function enables programs to implement asynchronous logic in a synchronous manner, as illustrated by the following example:

boost::asio::spawn(my_strand, do_echo);

// ...

void do_echo(boost::asio::yield_context yield)
{
  try
  {
    char data[128];
    for (;;)
    {
      std::size_t length =
        my_socket.async_read_some(
          boost::asio::buffer(data), yield);

      boost::asio::async_write(my_socket,
          boost::asio::buffer(data, length), yield);
    }
  }
  catch (std::exception& e)
  {
    // ...
  }
}
Requirements

Header: boost/asio/spawn.hpp

Convenience header: None


PrevUpHomeNext