如何使用boost上下文v2

时间:2016-11-19 15:08:08

标签: c++ c++11 boost

boost :: context library已更新到版本v2,更改破坏了我之前依赖boost :: jump_fcontext()的代码

旧的boost :: jump_fcontext()在新的API中不再可用。新的boost :: context v2改变了很多,我无法理解它。提供的例子并没有帮助我。

这是我试图用新的execute_context存档的程序结构的伪代码:

struct myctx
{
    int var;
    boost::context::execution_context fctx;
    myctx()
        : var(0), fctx("how to ctor")
    {}
    static void ctx_func(ctx_data * ptr) {

        while(ptr->var++ < 1000) {
            ptr->fctx("how to jump into main() myctx ??")
        }
    }
};
int main()
{    
    myctx mctx;
    while(1)
        mctx.fctx("how to jump into ctx_func() ??");
    return 0;
}

如何用真正的C ++替换这些字符串?我不明白boost::context::execution_context

的可能论点是什么

我对boost :: context的使用是我将当前上下文保存到myctx中并在无序的情况下切换到多个其他myctx。使用boost :: jump_fcontext,这是相当清楚的。

1 个答案:

答案 0 :(得分:0)

为什么不初始化'fctx'?即使它不会编译,因为ctx_data() - ctor(与myctx不同)... 也许你的意思是:

struct myctx
{
    int var;
    execution_context< myctx * > fctx;

    myctx()
        : var(0), fctx( myctx::ctx_func)
    {}

    static execution_context< myctx * > ctx_func(execution_context< myctx * > mctx, ctx_data * ptr) {
        while(ptr->var++ < 1000) {
            // jump into main()
            std::tie(mctx, ptr) = mctx( ptr);
        }
        return std::move( mctx);
    }
};

我不知道你想要传递myctx指针