1

重複の可能性:
GCC std::thread が名前空間 std に見つかりません

このコードは gcc でコンパイルされると思っていましたが、そうではありませんでした。私はmingw 4.7.0を使用しています。ヘッダーは表示されますが、クラスは存在しないようです。どのフラグが必要ですか? 私はそれを実行しました

g++ -std=gnu++11 main.cpp

コード

#include<atomic>
#include<thread>
#include<iostream>
using namespace std;
atomic<int> a1,a2,a3;

void test(){
    cout<<"run";
}

int main(){
    thread t(test);
    t.join();
}

私が得るエラーは、スレッドが存在しないということです。私の他のコードでは、 std::this_thread::yield() が存在しないとも言われています。MSVC11 はこれをうまくコンパイルします

4

1 に答える 1

6

GCCのMingW実装は、C++11に関して完全ではありません。1)待つ、2)自分で修正する(オープンソース!)、または3)別のコンパイラを使用することができます。GCCはpthreadを使用して、標準ライブラリのスレッド機能を実装するだけであり、Windowsでは使用できません。

g++ -std=c++11 -pthreadLinuxでは、プログラムを機能させるためにコンパイルする必要があります。


これは、GCCのMingWポートに欠けている唯一の側面ではありません。もう1つはstd::random_device、を開こうと/dev/urandomし、Windowsで予想どおりに失敗することです。基本的に、誰かが適切なWindows APIプリミティブを使用して実装の内臓を書き直す必要がありますが、まだ誰もそれを行っていないと思います。

于 2012-09-10T11:53:06.143 に答える