MinGW et std :: thread

J’ai donc essayé de comstackr et d’exécuter le code suivant sous Windows en utilisant un compilateur MinGW.

#include  #include  void test() { std::cout << "test" << std::endl; } int main() { std::thread t(test); } 

Je comstack avec la commande suivante:

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

Maintenant, le problème est la version de MinGW à utiliser et j’ai essayé toutes les versions que je connais.

  1. MinGW-builds: thread-win32
  2. MinGW-builds: thread-posix
  3. MinGW-w64: Rubenvb expérimental stdthread
  4. MinGW-w64: Rubenvb expérimental stdthread 4.7

Le numéro 1 ne fonctionne pas, car GCC ne prend apparemment en charge que les fonctionnalités de pthread en interne.

Le numéro 2 comstack et il produit essentiellement même des test (voir la dernière ligne de la sortie), mais il se bloque également avec l’erreur:

 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 

Les numéros 3 et 4 comstacknt à nouveau, mais ils ne génèrent pas de test et se bloquent instantanément, mais avec un résultat plus descriptif:

 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 m’a apporté bien sûr au suivi des bogues GCC et à quelques autres articles, cela a suggéré d’utiliser -pthread , ce qui n’aide pas du tout.

J’ai également essayé de lier manuellement avec winpthread et pthread , mais cela ne fait rien non plus.

Il n’y a pas non plus de différence entre -std=c++11 et -std=gnu++11

Je suis vraiment perdu en ce moment et je ne sais pas, s’il est possible d’obtenir une version MinGW, qui supporte std::thread , mais je suis peut-être juste en train de négliger certains indicateurs du compilateur. J’espère que quelqu’un peut m’aider!

Vous avez oublié de rejoindre votre fil de discussion:

 t.join(); 

FYI, il existe déjà une implémentation native de Win32 des primitives std :: thread et sync. C’est une bibliothèque en-tête uniquement et fonctionne sur toutes les versions de MinGW compatibles C ++ 11. https://github.com/meganz/mingw-std-threads