boost::asio如何生成多个协同程序,然后加入它们
boost::asio how spawn multiple coroutine, and then join them?
我正在使用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_context
类的实例(。在这个对象内部,严格在io_context::run
方法内部执行协程函数。
您所需要等待的就是在io_context
上调用run
,前提是您没有使用此io
对象来启动其他一些异步任务(因此您应该为您的协同程序创建专用的io_context
实例(。
如果你想处理多个协同程序,你必须调用后台线程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
的两个调用同时工作,并执行两个启动的协同程序。
Demo(它与代码不是1:1,但它展示了如何加入协同程序(。
相关文章:
- boost::asio如何生成多个协同程序,然后加入它们
- 将加密消息从 php 发送到 C++ 应用程序,然后使用 CryptoPP 进行解密
- 在 c++ 中运行命令,然后在该程序中运行命令
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 编写一个程序,提示用户输入一个整数,然后输出数字的单个数字和数字的总和
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- arm_data在第二次运行我的程序时中止失败,然后
- VS2015中内置的程序的发布版本与Qt运行然后关闭没有错误?
- 如何在C++中挂起程序,然后"取消挂起"它
- 我的程序在另一行中读取名字然后是姓氏,而我需要它一起读取名字和姓氏
- 如果用户想要输入 x 数量的数字,我如何设法跟踪它然后结束程序?
- 有没有办法从程序中打开一个新控制台,然后进入其中
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- QT创建者的运行应用程序会出现错误QXCBConnection,然后流产
- 运行在DLL中的工作线程在应用程序关闭时被终止,然后才能正常关闭它们
- 基本C++应用程序具有额外的输出,然后应该
- 当我递增指针然后将其删除时,为什么我的程序会崩溃
- 在我的程序中使用EOF,然后连续循环
- 打开一个 Shell 程序,向其传递参数,然后返回结果
- concurrent_queue内存消耗爆炸式增长,然后程序崩溃