2015-07-10 68 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