问题标签 [boost-coroutine2]

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 投票
0 回答
1200 浏览

c++ - 构建 Boost.Coroutines2 示例

我正在尝试构建 Boost 1.59 coroutine 和 coroutine2 示例。
我使用 b2(完整构建)构建了 boost,并且正在使用 CMake 生成一个 VC2015 项目来构建示例。

所有协程示例都可以正常构建和运行,但是我在coroutine2示例中出现链接错误。

我的CMakeLists.txt文件很简单,只需找到 boost,包含头文件并链接到 boost 库:

链接似乎无法找到 boost::system::system_category。
这是我的错误日志:

我究竟做错了什么?

0 投票
2 回答
815 浏览

c++ - 链接器错误使用动态链接构建带有 boost::coroutine2 和 Boost 1.60 的斐波那契示例

我在 Visual Studio 2015 中做了一个简单的项目,以重现我在 Boost 1.60 的更大代码库中遇到的问题

我试图简单地编译并运行此处找到的示例:https ://github.com/boostorg/coroutine2/blob/develop/example/fibonacci.cpp 有 1 个细微的变化 - 使用动态库。

因此,我的完整代码如下:

但是,我收到链接器错误:

我当然将包含目录设置为我的 boost 目录,并将我的链接器附加目录设置为 boost/stage/lib 目录。

0 投票
2 回答
4091 浏览

c++ - Boost.Coroutine 和 Boost.Coroutine2 的区别

Boost.CoroutineBoost.Coroutine2之间的主要区别是什么?

0 投票
2 回答
4326 浏览

c++ - boost asio 和 coroutine2 示例

在阅读文档时,coroutine2我发现了一段很好的代码片段,展示了如何使用它asio

以下是文档中的代码供参考:

但是我在 asio 文档上找不到工作示例,并且尝试在 coliru 上编译此代码段会给我与相关的编译器错误yield

您是否知道coroutine2上面示例中使用的最小客户端/服务器实现?

0 投票
1 回答
1038 浏览

c++ - 在没有 lambda 的情况下使用 boost coroutine2

我想这是我第一次在这里找不到已经回答的问题,如果有人在没有 lambda 的情况下成功使用了 boost coroutine2 lib,我真的可以使用一些帮助。我的问题,总结:

我打算将其用作另一个类中的协程,该类的任务是将每个产生的值放在其位置,因此我尝试实例化一个对象:

但这不会编译:

有人可以解释这个问题吗?

0 投票
1 回答
928 浏览

asynchronous - 如何使 C++ 异步编程更线性(协程?)

在 C++14 中,我想构建一种机制,以“顺序”方式使用异步 API,使用单个线程

更明确地说,我想实现这样的目标:

我的程序应该同时运行多个脚本,每个脚本应该是一系列标准函数调用(SyncOpX)。这些脚本可以并行运行,因为SyncOpX是根据异步函数(即,在 I/O 完成时启动 I/O 操作、返回和调用回调的函数)实现的。

当然,使用多个线程很容易找到解决方案(Spawn创建一个新线程并SynchOpX等待异步调用的结果)。但我正在寻找一个单线程解决方案,而不是。

我认为协程可以以某种方式使用。既然目前的标准是C++14,有没有解决办法boost coroutines呢?还是使用任何其他 [便携式] 机制?

顺便说一句:我正在使用boost::asio异步 I/O。

谢谢。

0 投票
1 回答
348 浏览

c++ - Coroutines2 - 为什么在没有调用源时运行 yield

我正在学习如何使用 boost coroutines2 库。我已经阅读了一些教程并开始尝试它。但后来我发现了一些非常令人困惑的事情。请看一下这个基本示例。

结果自然是这样的:

但是,令我惊讶的是,当我删除主函数中的“源”调用时,结果是一样的!(根据教程,协程是在构建时第一次调用,所以调用它是可以的,但现在应该只调用一次!)

结果还是:

当我删除协程中的第二个'yield'时,结果也是一样的:

结果:

这怎么可能?它是如何工作的?我预计当我不调用协程时,即使有另一个'yield'等待,也不会发生任何事情。

而且我发现这种行为也很奇怪:

当我在 main 中添加另一个“源”语句时,代码仍然打印与开头相同的内容!

结果:

没有错误,即使采购的次数超过了“产量”。只有在主函数中添加了一个“源”后,我才会收到运行时错误(此应用程序已请求运行时以一种不寻常的方式终止它......)

有人可以帮助我理解这种行为吗?

0 投票
2 回答
332 浏览

c++ - boost,coroutine2 (1.63.0):在 32 位 Windows 上抛出异常会使 Visual Studio 崩溃

在我的应用程序中,我使用 coroutine2 来生成一些我必须从流中解码的对象。这些对象是使用协程生成的。我的问题是,一旦我到达流的末尾并且理论上会抛出 std::ios_base::failure 我的应用程序在某些条件下崩溃。

提供此功能的函数在 C++ 中实现,导出为 C 函数并从 C# 调用。这一切都发生在 Windows 10 x64 上的 32 位进程上。不幸的是,当我在调试模式下从 C# 开始我的测试而没有附加本机调试器时,它只会可靠地崩溃。一旦我附加了本机调试器,一切都会按预期工作。

这是一个重现此问题的小型测试应用程序:

api.h

api.cpp

C#:

一些细节:

  • 我们正在使用 Visual Studio 2015 14 并动态链接 c++ 运行时。
  • 测试库静态链接 Boost 1.63.0。
  • 我们还尝试通过直接从 c++ 和 python 调用功能来重现此行为。到目前为止,这两项测试都没有成功。
  • 如果您使用 CTRL F5 启动 c# 代码(意味着没有 .net 调试器),一切都会好起来的。仅当您使用 F5(即附加的 .NET 调试器)启动它时,Visual Studio 实例才会崩溃。还要确保不要启用本机调试器!
  • 注意:如果我们不使用流中的异常,一切都很好。不幸的是,解码我的对象的代码使用了它们,因此我无法避免这种情况。

如果您对这里可能出现的问题或解决方案有一些额外的提示,那就太棒了。我不完全确定这是否是一个 boost 错误,也可能是 c# 调试器干扰了 boost-context。

提前致谢!最好的问候,迈克尔

0 投票
1 回答
1700 浏览

c++ - boost::coroutine2 vs CoroutineTS

Boost::Coroutine2 和 CoroutineTS(C++20) 是 C++ 中流行的协程实现。两者都暂停和恢复,但两种实现遵循完全不同的方法。

协程TS(C++20)

  • 无堆叠
  • 通过返回暂停
  • 使用特殊关键字

升压::协程2

  • 堆积如山
  • 呼叫暂停
  • 不要使用特殊关键字

有没有我应该只选择其中一个的特定用例?

0 投票
0 回答
628 浏览

c++ - boost协程的堆栈大小是多少?

boost::coroutine2 需要的最佳堆栈大小是多少?我们是否需要将其与线程堆栈大小相匹配?(https://www.boost.org/doc/libs/1_68_0/libs/context/doc/html/context/stack.html