spawn() creates internally a new coroutine with do_accept() as coroutine-fn (do_accept() is executed by the coroutine) and passes io_serve and port as arguments
How can the yield command be use, if it is not passed as an argument, like in the echo_server example?

I dissected the echo_server example and I think I'm going to be able to go from there.

Thanks for the info!


On 19 December 2013 17:28, Oliver Kowalke <oliver.kowalke@gmail.com> wrote:
2013/12/19 Carlos Ferreira <carlosmf.pt@gmail.com>
1.) do you know that boost.asio integrates boost.coroutine? example can be read at http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp03/spawn/echo_server.cpp
Yes, I noticed that but I kinda got lost when I saw that spawn(...) used stackfull coroutines but at the boost::asio::coroutine documentation, stackless coroutines were described. I wanted to ensure I was using stackfull coroutines.

boost::asio::spawn(io_service,
        boost::bind(do_accept,
          boost::ref(io_service), atoi(argv[1]), _1));

spawn() creates internally a new coroutine with do_accept() as coroutine-fn (do_accept() is executed by the coroutine) and passes io_serve and port as arguments
 

2.) coroutine<> is a type holder, e.g. you have to derive from coroutine<>::push_type or coroutine<>::pull_type
I also saw that documentation and also got lost there... What is the difference between the push_type and pull_type? For what purposes should I use them?

with the new interface boost.coroutine provides unidirectional transfer of data, e.g. you can push a data value (for instance std::string) from coroutine<std::string>::push_type to coroutine<std::string>::pull_type.
if you create push_type or pull_type the framework automatically create the counterpart for you and passes the instance to the coroutine-fn:

void coro_fn1( coroutine<std::string>::pull_type & c) {
  std::string s = c.get();
}

coroutine<std::string>::push_type c( coro_fn1);
std::string abc("abc");
c(abc);

or

void coro_fn2( coroutine<std::string>::push_type & c) {
  std::string xyz("xyz");
  c( xyz);
}

coroutine<std::string>::pull_type c( coro_fn2);
while ( c) {
  std::string s = c.get();
  c();
}


_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users



--

Carlos Miguel Ferreira
Researcher at Telecommunications Institute
Aveiro - Portugal
Work E-mail - cmf@av.it.pt
Skype & GTalk -> carlosmf.pt@gmail.com
LinkedIn -> http://www.linkedin.com/in/carlosmferreira