MinGW-W64オンラインインストーラには、選択できるフィールドがいくつかあります。しかし、これに関するドキュメントを見つけることができず、私が行った推測では、私が望んでいる動作が得られません。
明らかに多くの作業がこのプロジェクトに費やされているので、基本的なドキュメントの不足によって受け入れが妨げられているのは残念に思えます。
「バージョン」フィールドと「アーキテクチャ」フィールドは一目瞭然ですが、問題がある他のフィールドは次のとおりです(現在のインストーラーの時点で表示されている値)。
posix
およびwin32
dwarf
およびsjlj
0
、1
、2
。以前のインストールで選択した値は、win32
、seh
、および1
でした(それ以降、オプションが変更されたことは明らかですが、私は何が賢明ではありません)。
各オプションの長所と短所、特にスレッドモデルと例外処理、および「最良」のバージョンは何ですか?
x86_64-win32-seh-rev1
を使用して遭遇した特定の問題は次のとおりです。
std::thread
およびstd::condition_variable
はサポートされていませんデバッグの問題に対処することはできますが、C++ 11スレッドが機能するのは本当に素晴らしいことです。
つすべてのモデル(ドワーフ、sjlj、およびseh)に対するこの回答 を参照してください。
使用するスレッドの種類(POSIXスレッドまたはWindows APIスレッド)を決定できます。 posixスレッドには移植性の利点があります。コードを他のposixプラットフォーム(Linuxなど)で変更せずに使用できます。 win32スレッドAPIはWindows専用です。 Windowsを100%使用していて、APIのようなものであれば問題ありません。
std::thread
のような新しいC++機能を使用する場合、スレッド化のための標準APIがすでにあるため、影響はあまり目立ちません。 posix-/win32スレッドapiを直接使用しない場合、本当に大きな違いがあるかどうかはわかりません(多分std::thread
ネイティブハンドル?)
参照: mingw-w64 threads:posix vs win32
Mingw(-w64)はGCCバージョン(4.8.x、4.9.xなど)に従うため、これは別のバージョン番号だと思います。特定のビルドが必要ない場合は、最新バージョンを使用する必要があります。
スローされる例外が次の場合:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
それからちょうどlinkpthreads-そして問題は解決しました。
特定のオプションを使用する理由がない場合。私の個人的な推薦:
posix - dwarf - 2
<thread>
、<mutex>
および<future>
を有効にする