MinGW和std :: thread

时间:2013-03-30 13:10:29

标签: c++ windows c++11 mingw stdthread

所以我一直在尝试使用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-builds:thread-win32
  2. MinGW-builds:thread-posix
  3. MinGW-w64:stdthread experimental rubenvb
  4. MinGW-w64:stdthread experimental rubenvb 4.7
  5. 数字1不起作用,因为GCC apparently only supports在内部pthread内容。

    Number 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.
    
    谷歌当然把我带到了GCC bug tracker以及其他一些建议使用-pthread的帖子,这些帖子根本没用。

    我还尝试手动关联winpthreadpthread,但这也没有做任何事情。

    -std=c++11-std=gnu++11 ...

    之间也没有区别

    我现在真的迷路了,不知道,如果有可能得到支持std::thread的MinGW版本,但也许我只是忽略了一些编译器标志。我希望有人可以帮助我!

2 个答案:

答案 0 :(得分:10)

你忘了加入你的主题:

t.join();

答案 1 :(得分:3)

仅供参考,已有std :: thread和sync原语的本机win32实现。它是一个仅限标头的库,适用于任何符合C ++ 11标准的MinGW版本。 https://github.com/meganz/mingw-std-threads