1 2 // Copyright Oliver Kowalke 2009. 3 // Distributed under the Boost Software License, Version 1.0. 4 // (See accompanying file LICENSE_1_0.txt or copy at 5 // http://www.boost.org/LICENSE_1_0.txt) 6 7 #include <boost/coroutine/all.hpp> 8 9 #include <cstdlib> 10 #include <iostream> 11 12 #include <boost/bind.hpp> 13 14 struct X : private boost::noncopyable 15 { XX16 X() { std::cout << "X()" << std::endl; } ~XX17 ~X() { std::cout << "~X()" << std::endl; } 18 }; 19 fn(boost::coroutines::asymmetric_coroutine<void>::push_type & sink)20void fn( boost::coroutines::asymmetric_coroutine< void >::push_type & sink) 21 { 22 X x; 23 int i = 0; 24 while ( true) 25 { 26 std::cout << "fn() : " << ++i << std::endl; 27 sink(); 28 } 29 } 30 main(int argc,char * argv[])31int main( int argc, char * argv[]) 32 { 33 { 34 boost::coroutines::asymmetric_coroutine< void >::pull_type source( fn); 35 for ( int k = 0; k < 3; ++k) 36 { 37 source(); 38 } 39 std::cout << "destroying coroutine and unwinding stack" << std::endl; 40 } 41 42 std::cout << "\nDone" << std::endl; 43 44 return EXIT_SUCCESS; 45 } 46