我正在使用Boost coroutine library,我需要我的协程可以重新进入。
这意味着我应该能够多次启动协程从头开始。
有哪些选择?
我目前的解决方法是每次都重新创建新的协程:
boost::coroutines::coroutine<int>::pull_type *source = new boost::coroutines::coroutine<int>::pull_type(
[&](boost::coroutines::coroutine<int>::push_type& sink){
sink(0);
cout << "Hello world!" << endl;
});
(*source)();
source = new boost::coroutines::coroutine<int>::pull_type(
[&](boost::coroutines::coroutine<int>::push_type& sink){
sink(0);
cout << "Hello world!" << endl;
});
(*source)();
source = new boost::coroutines::coroutine<int>::pull_type(
[&](boost::coroutines::coroutine<int>::push_type& sink){
sink(0);
cout << "Hello world!" << endl;
});
(*source)();
答案 0 :(得分:1)
因为来自boost.coroutine的协程是stackfull,所以你不能多次启动它们。 从您的示例中不清楚您想要做什么:
答案 1 :(得分:0)
我根本不知道每次创建一个新鲜的协程有什么问题 - 创建它们并不昂贵。
如果您的协程中有大量数据,那么构建起来很昂贵,请将其全部移到某个数据类中,并将引用传递给您的协程。