首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在fiber.detach()之后执行?

何时在fiber.detach()之后执行?
EN

Stack Overflow用户
提问于 2016-10-27 16:16:48
回答 1查看 539关注 0票数 1
代码语言:javascript
复制
void helloFiber(boost::fibers::future<void> &f)
{
    cout << "Hello, boost::fiber" << endl;
    f.get();
}

int main()
{
    boost::fibers::promise<void> pm;
    boost::fibers::future<void> ft = pm.get_future();
    {
        boost::fibers::fiber f(helloFiber, std::move(ft));
        cout << "Before join." << endl;
        f.detach();
    }
    pm.set_value();
    cout << "After join." << endl;
    return 0;
}

此程序输出:加入前。加入之后。你好,加油::纤维。

为什么它不输出:在加入之前。你好,加油::纤维后加入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-28 11:44:17

您应该将helloFiber()的签名更改为对未来的rvalue引用(移动未来)。

因为您分离了光纤,所以调度程序必须加入它(在您的示例中)。

请查看:mgmt.html (部分:枚举启动):

枚举启动指定控件是否立即传递到新启动的光纤中。

代码语言:javascript
复制
boost::fibers::fiber f( boost::fibers::launch::post, helloFiber, std::move(ft));
boost::fibers::fiber f( boost::fibers::launch::dispatch, helloFiber, std::move(ft));

耳聋是post -但是您想要调度,所以输出是:

你好,加油::加入前纤维。加入之后。

它永远不会打印:“加入前。你好,增强::纤维在连接后。”因为你把

代码语言:javascript
复制
cout << "Before join." << endl;

之后

代码语言:javascript
复制
   boost::fibers::fiber f(helloFiber, std::move(ft));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40289626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档