我想使用纤维为我的游戏引擎实现一个作业系统。在网上搜索了一个很好的纤维 c++ 实现后,我发现Boost.Context是一个很好的起点。
更新 1:我想实现自己的调度算法,因此Boost.Fiber、Boost.Coroutine、Boost.Coroutine2不适合我的实现。
在为 x64 架构编译 boost 并尝试运行 boost文档中的基本示例后,我得到了以下异常:
boost::context::detail::forced_unwind 在内存位置
这是我尝试运行的代码(Visual Studio 2015 企业版,Windows 7):
#include <iostream>
#include <boost\context\continuation.hpp>
namespace ctx=boost::context;
int main()
{
ctx::continuation source=ctx::callcc
(
[](ctx::continuation && sink)
{
int a=0;
int b=1;
for(;;)
{
sink=sink.resume(a);
auto next=a+b;
a=b;
b=next;
}
return std::move(sink);
}
);
for (int j=0;j<10;++j) {
std::cout << source.get_data<int>() << " ";
source=source.resume();
}
return 0;
}
代码运行正确(正确输出:0 1 1 2 3 5 8 13 21 34 55),但是当它完成运行时出现异常。
更新 2:仅发布版本发生异常
我想问两个关于提升上下文的问题:
1)是什么导致了堆栈展开异常,如何避免?
2)我发现 boost 文档有点肤浅,并且找不到任何其他关于如何使用 boost 上下文的教程。你能指导我一些关于提升上下文的好资源/教程吗?