
Am 21.09.2012 19:17, schrieb Eugene Yakubovich:
template <typename C> void timer(C c, chrono::seconds interval) { while( interval != chrono::seconds::zero() ) { this_thread::sleep_for(interval); interval = c(interval); } }
chrono::seconds tick(chrono::seconds last_interval) { std::cout << "tick" << std::endl; return last_interval; }
// use with function timer(tick, chrono::seconds(1));
// use with coroutine coroutine<chrono::seconds(chrono::seconds)> c( [](coroutine<chrono::seconds(chrono::seconds)> c, chrono::seconds i) { timer(c, i); } );
chrono::seconds s = c(chrono::seconds(1)); s = c(2*s); s = c(3*s); s = c(5*s);
I'm not sure what this means for the best interface but I did want to share these thoughts and examples.
thank you for your examples: If coroutine's template signature returns a type different from void it is required that the coroutine function does return the same type instead of void as in your example. template <typename C> void timer(C c, chrono::seconds interval) { // while( interval != chrono::seconds::zero() ) { // this_thread::sleep_for(interval); // interval = c(interval); // } } coroutine<chrono::seconds(chrono::seconds)> c( [](coroutine<chrono::seconds(chrono::seconds)> c, chrono::seconds i) { timer(c, i); } ); chrono::seconds s = c(chrono::seconds(1)); Which value has variable 's' after return from 'c(chrono::seconds(1))' ? regards, Oliver