2013-01-03 55 views
2

我想知道是否有沒有例外的方式使用std::thread,如果不是我可以使用的替代方案?std ::線程無例外?

其實我的目標是windows和linux桌面,但這個可能會在未來擴展。

編輯:只是使用編譯器選項來禁用異常,不是一個可接受的解決方案。錯誤必須以某種方式交付。

問題是隻有在我的代碼中使用的異常是那些處理std::thread錯誤的異常。我想擺脫那些有一個無異常的代碼

edit2:我發現tinythread ++庫,它似乎很容易修改如果需要和工作無例外。

+0

您可以使用這些例外,只要你正在調試你的項目。在此之後,您可以假設不會拋出異常,因爲異常會指示意外的環境更改。 – Ali1S232

+0

真正的問題是,你認爲創建一個線程總是成功。通常情況也是如此,但通常這是一個錯誤的假設。它可能會失敗,例外。這就是爲什麼'std :: thread' **必須在它的構造函數中有異常的地方,這是溝通失敗的唯一有效方式('detach'和'join' throwing,OTOH,公牛,這些應該'assert',因爲它不是加入不可連接線程的「異常失敗」,所以這是一個編程錯誤)。雖然,正如盧克B所說,如果你不喜歡它們,就關掉例外。 – Damon

+0

「只是使用編譯器選項來禁用異常,不是一個可接受的解決方案」然後使用異常。你基本上要求禁用部分C++語言,但仍然使用C++語言。 – GManNickG

回答

1

您可以禁用STL的異常,但是對於每個編譯器都是不同的。當然,因爲標準實際上說有些異常必須拋出,所以無論什麼時候你會做出會拋出異常的東西,你都會得到未定義的行爲。

在GCC您在使用MSVC -fno-exceptions

禁用例外:Can I disable exceptions in STL?

+1

未定義的行爲是不可接受的,我需要以某種方式處理錯誤。 – Thelvyn

+0

@Thelvyn你期待什麼樣的錯誤? –

+0

例如檢測線程創建失敗,然後很好地清理並報告錯誤。 – Thelvyn