Подтвердить что ты не робот

MinGW и std:: thread

Итак, я пытался получить следующий код для компиляции и запуска в Windows с помощью компилятора MinGW.

#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 не работает, поскольку 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 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 support team for more information.

Google привел меня, конечно, в отслеживание ошибок GCC и некоторые другие сообщения, которые предложили использовать -pthread, что не помогает на всех.

Я также попытался вручную привязать к winpthread и pthread, но это тоже не делает.

Также нет разницы между -std=c++11 и -std=gnu++11...

Я действительно потерялся прямо сейчас и не знаю, возможно ли получить версию MinGW, которая поддерживает std::thread, но, возможно, я просто пропускаю некоторые флаги компилятора. Я надеюсь, что кто-то там может мне помочь!

4b9b3361

Ответ 1

Вы забыли присоединиться к своей теме:

t.join();

Ответ 2

FYI, уже существует встроенная реализация win32 примитивов std:: thread и sync. Это библиотека только для заголовков и работает на любой совместимой с С++ 11 версии MinGW. https://github.com/meganz/mingw-std-threads