当在fiber.detach()之后执行时
when execute after fiber.detach()?
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;
}
程序输出:Before join。后加入。你好,boost::纤维。
为什么不输出:Before join。
您应该将helloFiber()的签名更改为对future的右值引用(您移动了future)。
因为您分离了光纤,所以调度程序必须加入它(在您的示例中是在销毁时)。
请查看:http://www.boost.org/doc/libs/1_62_0/libs/fiber/doc/html/fiber/fiber_mgmt.html(部分:枚举启动):
'enumeration launch '指定控制是否立即传递到新启动的光纤。'
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 -但是你想要调度,所以输出是:
你好,boost::纤维在加入之前。后加入。
它永远不会打印:'Before join。你好,boost::fiber加入后。"因为你放了
cout << "Before join." << endl;
后 boost::fibers::fiber f(helloFiber, std::move(ft));
相关文章:
- 如何在析构函数中执行一些代码*在*成员被销毁之后
- 为什么函数不在特定函数之后执行
- 执行QACTION之后如何设置焦点
- spin() 函数之后的额外代码不会执行
- 使用GetModuleFilenameEx之后,如何仅获得可执行的名称
- 将在 CATCH 块之后执行代码
- 在机器异常之后重新执行程序
- 在调用GNUPLOT之后,如何继续执行C 代码
- 线程在成功pthread_create之后不执行任何操作
- Visual C++Express.exe在第一次执行之后再次运行
- 在执行cin之后,对标准输入中的字符数进行计数
- 赋值重载显式调用析构函数(在执行其他二进制重载运算符之后)
- 在不使用睡眠的情况下在延迟之后执行C++中的函数
- 在MAKE之后,如何运行一个不可执行的文件
- 虽然循环中断,但之后的代码永远不会执行
- 在执行remove_if()之后擦除()
- 在lanching vcvarsall.bat之后从ant执行msbuild
- 当在fiber.detach()之后执行时
- 执行else块和if块之后的代码
- 松弛的内存顺序效果是否可以扩展到执行线程的生命周期之后?