问题标签 [boost-coroutine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
666 浏览

c++ - 为什么 io_context 出现在我的 boost asio 协程服务器中

我的服务器基于 boost spawn echo 服务器示例,并在此线程中进行了改进。真正的服务器很复杂,我做了一个更简单的服务器来显示问题:

服务器监听 12345 端口,从新连接接收 0x4000 字节数据。

客户端运行 1000 个线程,连接到服务器并发送 0x4000 字节数据。

问题:当客户端运行时,1秒后通过控制台中的Ctrl-Cio_context终止客户端进程,然后服务器将停止,服务器进入无限循环并消耗100%的cpu。如果这没有发生,重复启动客户端并杀死它几次,它就会发生。也许几次后它会耗尽 TCP 端口,只需等待几分钟再试一次,它会在我的机器上杀死客户端 3~15 次后发生。

boost文档说是io_context.stopped()用来判断是否停止

要么通过显式调用 stop(),要么由于工作用完

我从不调用io_context.stop(),并使用 amake_work_guard(io_context)来保持io_context不停止,但为什么它仍然停止?

我的环境:Win10-64bit,boost 1.71.0

服务器代码:

客户端:

更新解决方法:

我想和协程会发生问题io_context,所以我尝试替换不必要spawn的 to std::thread,并且它有效,io_context永远不会停止。但为什么还是会出现问题呢?

代替:

至:

0 投票
2 回答
91 浏览

c++ - 如何等待两个计时器中的任何一个完成(Boost Asio)

两者 都完成时timer1,下面的代码将打印到控制台。timer2如何将其更改为在其中一个或完成时打印 timer1然后timer2取消另一个计时器。

0 投票
2 回答
109 浏览

c++ - 是否需要从 C++ 中的调用函数恢复协程?

我有一个关于 co_await 在 C++ 中的工作的问题。我有以下代码片段:-

co_await关键字用于暂停任何协同程序的执行。我们在上面的代码中有 2 个使用它的实例。在主函数中,我们可以访问协程。当程序执行该行时co_await downloadAsync(url),它将调用downloadAsync或只是暂停协同程序。另外,为了执行下一个saveInCacheAsync(p, text)函数,主函数调用是否应该在协程上恢复?还是会自动调用它?

0 投票
1 回答
111 浏览

c++ - 最小的等待示例

我想知道为什么以下程序会崩溃。如何使用awaitablenot with boost::asio::async_write/async_read功能。

让我们来看看:

这导致

它有什么问题?

UPD:自行解决。我应该只使用co_return. 因此,它必须是以下内容:

0 投票
0 回答
48 浏览

c++ - 使用全局产量提升协程

由于我最初的问题被标记为因为我在一个问题中提出了两个问题,因此我将更加具体。

我想使用boost库在单个线程中进行上下文切换。因此我的计划是使用coroutines。但理想情况下,我不想更改传输参数或现有函数的函数类型。

有没有办法将产量声明为每个任务的全局变量?那么我就不会有额外的传输参数了。

输出:

注意:我也查看了源代码,但我不太了解模板等(我是 C++ 初学者)。也许有人已经有这个话题的经验并且可以帮助我。