问题标签 [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.
c++ - 构建 Boost.Coroutines2 示例
我正在尝试构建 Boost 1.59 coroutine 和 coroutine2 示例。
我使用 b2(完整构建)构建了 boost,并且正在使用 CMake 生成一个 VC2015 项目来构建示例。
所有协程示例都可以正常构建和运行,但是我在coroutine2示例中出现链接错误。
我的CMakeLists.txt
文件很简单,只需找到 boost,包含头文件并链接到 boost 库:
链接似乎无法找到 boost::system::system_category。
这是我的错误日志:
我究竟做错了什么?
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 目录。
c++ - boost asio 和 coroutine2 示例
在阅读文档时,coroutine2
我发现了一段很好的代码片段,展示了如何使用它asio
以下是文档中的代码供参考:
但是我在 asio 文档上找不到工作示例,并且尝试在 coliru 上编译此代码段会给我与相关的编译器错误yield
您是否知道coroutine2
上面示例中使用的最小客户端/服务器实现?
c++ - 在没有 lambda 的情况下使用 boost coroutine2
我想这是我第一次在这里找不到已经回答的问题,如果有人在没有 lambda 的情况下成功使用了 boost coroutine2 lib,我真的可以使用一些帮助。我的问题,总结:
我打算将其用作另一个类中的协程,该类的任务是将每个产生的值放在其位置,因此我尝试实例化一个对象:
但这不会编译:
有人可以解释这个问题吗?
asynchronous - 如何使 C++ 异步编程更线性(协程?)
在 C++14 中,我想构建一种机制,以“顺序”方式使用异步 API,使用单个线程。
更明确地说,我想实现这样的目标:
我的程序应该同时运行多个脚本,每个脚本应该是一系列标准函数调用(SyncOpX
)。这些脚本可以并行运行,因为SyncOpX
是根据异步函数(即,在 I/O 完成时启动 I/O 操作、返回和调用回调的函数)实现的。
当然,使用多个线程很容易找到解决方案(Spawn
创建一个新线程并SynchOpX
等待异步调用的结果)。但我正在寻找一个单线程解决方案,而不是。
我认为协程可以以某种方式使用。既然目前的标准是C++14
,有没有解决办法boost coroutines
呢?还是使用任何其他 [便携式] 机制?
顺便说一句:我正在使用boost::asio
异步 I/O。
谢谢。
c++ - Coroutines2 - 为什么在没有调用源时运行 yield
我正在学习如何使用 boost coroutines2 库。我已经阅读了一些教程并开始尝试它。但后来我发现了一些非常令人困惑的事情。请看一下这个基本示例。
结果自然是这样的:
但是,令我惊讶的是,当我删除主函数中的“源”调用时,结果是一样的!(根据教程,协程是在构建时第一次调用,所以调用它是可以的,但现在应该只调用一次!)
结果还是:
当我删除协程中的第二个'yield'时,结果也是一样的:
结果:
这怎么可能?它是如何工作的?我预计当我不调用协程时,即使有另一个'yield'等待,也不会发生任何事情。
而且我发现这种行为也很奇怪:
当我在 main 中添加另一个“源”语句时,代码仍然打印与开头相同的内容!
结果:
没有错误,即使采购的次数超过了“产量”。只有在主函数中添加了一个“源”后,我才会收到运行时错误(此应用程序已请求运行时以一种不寻常的方式终止它......)
有人可以帮助我理解这种行为吗?
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。
提前致谢!最好的问候,迈克尔
c++ - boost::coroutine2 vs CoroutineTS
Boost::Coroutine2 和 CoroutineTS(C++20) 是 C++ 中流行的协程实现。两者都暂停和恢复,但两种实现遵循完全不同的方法。
协程TS(C++20)
- 无堆叠
- 通过返回暂停
- 使用特殊关键字
升压::协程2
- 堆积如山
- 呼叫暂停
- 不要使用特殊关键字
有没有我应该只选择其中一个的特定用例?
c++ - boost协程的堆栈大小是多少?
boost::coroutine2 需要的最佳堆栈大小是多少?我们是否需要将其与线程堆栈大小相匹配?(https://www.boost.org/doc/libs/1_68_0/libs/context/doc/html/context/stack.html)