11

そのため、MinGW コンパイラを使用して、次のコードをコンパイルして Windows で実行しようとしました。

#include <iostream>
#include <thread>

void test()
{
    std::cout << "test" << std::endl;
}

int main()
{
    std::thread t(test);
}

次のコマンドでコンパイルしています。

g++ -std=c++11 test.cpp -o test.exe

ここでの問題は、使用する必要がある MinGW のバージョンであり、私が知っているすべてのバージョンについて試しました。

  1. MinGW ビルド: thread-win32
  2. MinGW ビルド:スレッド posix
  3. MinGW-w64: stdthread の実験的な rubenvb
  4. MinGW-w64: stdthread 実験的 rubenvb 4.7

番号 1 は機能しません。GCC は明らかに内部的に pthread のものしかサポートしていないからです。

番号 2 はコンパイルされ、基本的に出力も行われますtestが (出力の最後の行を参照)、次のエラーでクラッシュします。

terminate called without an active exception

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
test

番号 3 と 4 もコンパイルされますが、出力されずtest、代わりに即座にクラッシュしますが、より説明的な出力が得られます。

terminate called after throwing an instance of 'std::system_error'
  what():  Enable multithreading to use std::thread: Operation not permitted

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

もちろん、GoogleはGCCバグトラッカーと他のいくつかの投稿に私を連れてきて、使用を提案しましたが-pthread、まったく役に立ちません。

winpthreadとに対して手動でリンクしようとしましpthreadたが、それも何もしません。

との間にも違いはありませ-std=c++11-std=gnu++11...

をサポートする MinGW バージョンを入手できるかどうかはわかりませんが、std::threadコンパイラ フラグを見落としているだけかもしれません。誰かが私を助けてくれることを願っています!

4

2 に答える 2

10

スレッドに参加するのを忘れました:

t.join();
于 2013-03-30T13:23:20.213 に答える
4

参考までに、std::thread および sync プリミティブのネイティブの win32 実装が既にあります。これはヘッダーのみのライブラリであり、MinGW の C++11 準拠バージョンで動作します。 https://github.com/meganz/mingw-std-threads

于 2014-12-11T11:34:47.570 に答える