3

--編集 MinGW GCC 8.4.1 を使用したい場合、threads/mutex/futures/ atomics は Win32 スレッダー バージョンをダウンロードせず、Posix バージョンをダウンロードします。 - 編集

私の MinGW のインストールは次のとおりです: x32-4.8.1-release-win32 (スレッドとして) - sjlj rev 5

MinGW GCC 4.8.1 (リビジョン 5) が C:\MinGW\mingw32 にインストールされていることを解凍して正しく確認しました。 正しいパスで最新かつ最高のコンパイラを探すようにコード ブロックを設定しました (これは確実です)。#include iostreamを使用して通常のプログラムをコンパイルできます。さて、 #include スレッドを 使用してプログラムを実行しようとすると、「エラー: 'スレッド' は 'std' のメンバーではありません」というメッセージが表示されます。

ここに私がやったことと私が試したことがあります:

ここcplusplus.comで、一種のテンプレートまたはチュートリアルに 従っています。 Webページに表示されているコードとまったく同じコードを持っています(下に向かって)。 コード ブロックで、コンパイラ フラグ「g++ を C++11 ISO 言語標準に準拠させる -std=c++11」を使用しようとしました。

また、フラグ「g++ を今後の C++0x ISO 言語標準に準拠させる -std=c++0x」を試しました。

私は両方を同時に試しましたが、一度に1つずつ試しましたが、マスはありません。これらのコマンドも手動で試しました。

手動で試した別のコマンドは、スレッド ヘッダーで推奨されていた -std=gnu++11でした。


--EDIT __cplusplusは < 201103L のように見えますが、これはスレッド ヘッダーに記載されています (または定義されています)。これは、-std=c++11 を手動で使用した場合にのみ発生します。何らかの理由で C::B が手動で指定した場合は削除されるため、このフラグを使用するにはチェック ボックスを使用する必要があります... --EDIT

[Toolchain Executables] タブのコンパイラ設定は次のとおりです。

C コンパイラ: i686-w64-mingw32-gcc-4.8.1.exe

C++ コンパイラ: i686-w64-mingw32-c++.exe

動的リンカー: i686-w64-mingw32-c++.exe

静的リンカー: ar.exe

デバッガー: GDB/CDB デバッガー: デフォルト

リソース コンパイラ: windres.exe

メイクプログラム: mingw32-make.exe

bin フォルダー内の他の実行可能ファイルを使用しようとしましたが、まだ運がありません... GCC が C++11 またはスレッドをサポートしているかどうか疑問に思い始めています!?

MinGW GCC、コードブロック、または一般的にスレッドを動作させることができた人はいますか? もしそうなら、どのようにしましたか?役立つリンクはありますか?何かアドバイス?

PS posix や SFML のような他の SDK のようなスレッド化の方法が他にもあることは知っています (私はこれでスレッド化を試みました)。しかし、私はGCCスレッドを使用したいのですが、必要なファイルがすべてあるのに、なぜそれが難しいのか、非常に困惑しています...

--EDIT コード ブロックの外側でプログラムを手動でコンパイルすると、g++ c++ を使用するか i686-w64-mingw32-g++/c++ を使用するかに関係なく、同じエラーが発生することがわかりました。

ファイルをビルドするために実行するコマンドは次のとおりです。

C:\MinGW\mingw32\bin>g++.exe -D__GXX_EXPERIMENTAL_CXX0X__ -o0 -g3 -Wall -c -fmes sage-length=0 -std=c++11 -Wc++11-compat -o obj\Debug\main .o "F:\C Projects\Code Blocks\thread\main.cpp"

それでもエラーが返されます:「スレッド」は「std」のメンバーではありません

これは悪いビルドでしょうか?私は他のリビジョンを試してみます... --EDIT

4

4 に答える 4

3

おそらく回答が遅れていますが、これが私にとってうまくいったことです:

1.以下から x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb.7z を取得します。

http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/rubenvb/gcc-4.8-experimental-stdthread/

2.コードブロックで新しいコンパイラをセットアップします

  • x86_64-w64-mingw32-gcc-4.8.1.exe
  • x86_64-w64-mingw32-g++.exe
  • x86_64-w64-mingw32-g++.exe
  • ar.exe
  • windres.exe
  • mingw32-make.exe

3.プロジェクトに新しいコンパイラを設定する

  • プロジェクトを右クリック -> ビルド オプション
  • 新しいコンパイラを選択
  • コンパイラのフラグの下で、-std=c++0x および -std=c++11 をチェックします
  • その他のオプションで -std=gnu++11 を設定します

4. C++11 の並行処理を楽しむ

代わりに、ビジュアルスタジオを使用することもできます。

于 2013-12-28T15:22:08.337 に答える
0

gcc 4.8.1 は完全な C++11 機能です。Windows の実装について話すことはできませんが、Linux と OS X では、すべての同時実行機能を含め、宣伝どおりに動作することは確かです。私は#include <thread>電話をかけるだけg++ -std=gnu++11でうまくいきます。これは、問題なくコンパイルされる最小限のコードです。

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mx;
int i;

void thrfunc();

int main(void)
{
   i=0;
   std::thread          thr1(thrfunc),thr2(thrfunc);

   thr1.join();
   thr2.join();

   return 0;
}

void thrfunc()
{
   mx.lock();
   i++;
   std::cout << std::this_thread::get_id() << " i: " << i << std::endl;
   mx.unlock();
}
于 2013-09-23T04:19:57.997 に答える
0

私は同じ問題を抱えていました。最新のMinGW-Buildsをインストールしました

http://sourceforge.net/projects/mingwbuilds/files/mingw-builds-install/ ツールチェーンの実行可能ファイルを次のように設定します。

x86_64-w64-mingw32-gcc-4.8.1.exe
x86_64-w64-mingw32-g++.exe
x86_64-w64-mingw32-g++.exe
ar.exe
windres.exe
mingw32-make.exe

これが役立つことを願っています。

于 2013-10-17T03:14:59.443 に答える
0

GCC 4.8.1 を意味していたと思います - 答えはイエスです。部分的なマルチスレッド サポートを含む C++11 機能のセットをサポートしています。サポートされているセットを確認するには、 http: //gcc.gnu.org/releases.htmlにアクセスしてください。

于 2013-09-23T03:45:57.497 に答える