2015-07-10 69 views
1

我想玩boost::fiber库,但我遇到了“Hello,World”示例的问题。在下面的代码中,程序流程会在光纤结束并且主函数不再返回时阻塞。为什么加强::纤维块?

#include <iostream> 
#include <boost/fiber/all.hpp> 

using namespace std; 

void helloFiber() 
{ 
    cout << "Hello, boost::fiber" << endl; 
} 

int main() 
{ 
    boost::fibers::fiber f(helloFiber); 

    cout << "Before join." << endl; 
    f.join(); 
    cout << "After join." << endl; 

    return 0; 
} 

结果是:

之前加入。
你好,升压::纤维

我建boost::fiber当前开发分支的modular-boost目前的发展分支。这是当前实现中的行为错误还是我的用法有问题?

回答

1

测试应用打印:

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

也许你已经从分店开出结帐破损版

-2

试试这个

int main() 
{ 
    boost::fibers::fiber f(helloFiber); 
    f.detach(); 
    f.join(); 

    return 0; 
} 

http://www.boost.org/doc/libs/1_58_0/doc/html/thread.html

+0

欢迎来到SO,感谢你发布了一个答案。您的答案似乎能够完成工作,但您可以通过为代码提供一些背景(甚至只是一个完整的句子)来改善答案。您可以在[回答问题的帮助页面](http://stackoverflow.com/help/how-to-answer)上找到其他提示。 –

+0

这会抛出一个异常实例:** boost :: fibers :: fiber_resource_error **,因为分离之后光纤不再处于可连接状态。确切的错误信息是* boost fiber:光纤不可连接:无效的参数*。 – bobeff

+0

嗯,我会认为我通过下一次。对不起,我的质量差的答案。我目前没有机器去测试。 只有一个想法: cout不是线程安全的。如果你从主例程中删除了cout语句并且只保留了一个在光纤中的语句,你的程序是否会完成? – user2386098