1
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;
}

该程序输出: 在加入之前。加入后。你好,升压::纤维。

为什么不输出:加入前。你好, boost::fiber 加入后。

4

1 回答 1

0

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

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

请看一下: http: //www.boost.org/doc/libs/1_62_0/libs/fiber/doc/html/fiber/fiber_mgmt.html(部分:枚举启动):

'枚举发射指定控制是否立即传递到新发射的光纤。

boost::fibers::fiber f( boost::fibers::launch::post, helloFiber, std::move(ft));
boost::fibers::fiber f( boost::fibers::launch::dispatch, helloFiber, std::move(ft));

deafult 是 post - 但你想要调度,所以输出是:

你好, boost::fiber 加入前。加入后。

它永远不会打印:'在加入之前。你好,boost::fiber 加入后。因为你把

cout << "Before join." << endl;

   boost::fibers::fiber f(helloFiber, std::move(ft));
于 2016-10-28T11:44:17.090 回答