我想知道是否有沒有例外的方式使用std::thread
,如果不是我可以使用的替代方案?std ::線程無例外?
其實我的目標是windows和linux桌面,但這個可能會在未來擴展。
編輯:只是使用編譯器選項來禁用異常,不是一個可接受的解決方案。錯誤必須以某種方式交付。
問題是隻有在我的代碼中使用的異常是那些處理std::thread
錯誤的異常。我想擺脫那些有一個無異常的代碼
edit2:我發現tinythread ++庫,它似乎很容易修改如果需要和工作無例外。
我想知道是否有沒有例外的方式使用std::thread
,如果不是我可以使用的替代方案?std ::線程無例外?
其實我的目標是windows和linux桌面,但這個可能會在未來擴展。
編輯:只是使用編譯器選項來禁用異常,不是一個可接受的解決方案。錯誤必須以某種方式交付。
問題是隻有在我的代碼中使用的異常是那些處理std::thread
錯誤的異常。我想擺脫那些有一個無異常的代碼
edit2:我發現tinythread ++庫,它似乎很容易修改如果需要和工作無例外。
您可以禁用STL的異常,但是對於每個編譯器都是不同的。當然,因爲標準實際上說有些異常必須拋出,所以無論什麼時候你會做出會拋出異常的東西,你都會得到未定義的行爲。
在GCC您在使用MSVC -fno-exceptions
您可以使用這些例外,只要你正在調試你的項目。在此之後,您可以假設不會拋出異常,因爲異常會指示意外的環境更改。 – Ali1S232
真正的問題是,你認爲創建一個線程總是成功。通常情況也是如此,但通常這是一個錯誤的假設。它可能會失敗,例外。這就是爲什麼'std :: thread' **必須在它的構造函數中有異常的地方,這是溝通失敗的唯一有效方式('detach'和'join' throwing,OTOH,公牛,這些應該'assert',因爲它不是加入不可連接線程的「異常失敗」,所以這是一個編程錯誤)。雖然,正如盧克B所說,如果你不喜歡它們,就關掉例外。 – Damon
「只是使用編譯器選項來禁用異常,不是一個可接受的解決方案」然後使用異常。你基本上要求禁用部分C++語言,但仍然使用C++語言。 – GManNickG