Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ asio如何生成多个协同程序,然后加入它们?_C++_Join_Yield_Coroutine_Asio - Fatal编程技术网

C++ asio如何生成多个协同程序,然后加入它们?

C++ asio如何生成多个协同程序,然后加入它们?,c++,join,yield,coroutine,asio,C++,Join,Yield,Coroutine,Asio,我正在使用boost::asio,我的代码如下: void my_coroutine(boost::asio::io_context& io, boost::asio::yield_context yield) { boost::asio::spawn(io, other_1_coroutine); boost::asio::spawn(io, other_2_coroutine); async_wait(other_1 and other

我正在使用boost::asio,我的代码如下:

void my_coroutine(boost::asio::io_context& io, boost::asio::yield_context yield)
{
        boost::asio::spawn(io, other_1_coroutine);
        boost::asio::spawn(io, other_2_coroutine);
        async_wait(other_1 and other_2);
        continue_do_something();
}
我希望并发生成2个或更多的协同路由,然后异步等待它们。 我尝试了协同程序TS,但是g++还不支持。
如何实现这一点?

当调用
spawn
函数时,作为第一个参数执行上下文传递(作为
io\u上下文
类的实例)。在这个对象内部,严格地说是在
io_context::run
方法内部执行协同路由函数

只要您没有使用这个
io
对象来启动一些其他异步任务(因此您应该为您的协同程序创建专用的
io\u上下文
实例),那么在协同程序完成之前,您只需在
io\u上下文
上调用
run

如果您想处理多个协程,您必须调用后台线程
run
metod

boost::asio::spawn(io, other_1_coroutine);
boost::asio::spawn(io, other_2_coroutine);

// join section:
std::thread th( [&](){ io.run(); } );
io.run();
th.join();

continue_do_something();
在上面的代码中,我们通过调用
run
创建了一个线程。因此,
run
的两个调用同时工作,并执行两个启动的协同路由


(代码不是1:1,但它展示了如何加入协同程序)。

我希望以异步、无块、无线程睡眠/线程加入的方式运行程序的所有部分。“组合异步操作”/asio::async\u initiate()正确吗?我不明白。在标题中,你们写的是“join”,问题中你们说的是“然后异步等待它们”。在通过
spawn
启动协同程序并将
run
放在后台线程中之后,您可以并行执行其他代码,这不是您想要的吗?很抱歉“join”一词,我希望异步等待所有生成的协同程序,它应该是“like join”,也像python3:asyncio.wait(aws,*,loop=None,timeout=None,当=全部完成时返回)