Dans l'installateur en ligne MinGW-W64, vous pouvez sélectionner plusieurs champs. Cependant, je ne trouve aucune documentation à ce sujet, et les suppositions que j'ai faites ne me donnent pas le comportement que je veux.
De toute évidence, beaucoup de travail a été consacré à ce projet, il semble donc dommage que l'adoption soit freinée par le manque de documentation de base.
Les champs "Version" et "Architecture" sont explicites mais les autres champs avec lesquels je rencontre des problèmes sont (les valeurs sont celles de l'installateur actuel):
posix
et win32
dwarf
et sjlj
0
, 1
, 2
.Les valeurs que j'ai choisies lors de mon installation précédente étaient win32
, seh
et 1
(il est clair que les options ont changé depuis, mais je ne suis pas plus sage quant à ce qui est quoi).
Quels sont les avantages et les inconvénients de chaque option, en particulier le modèle de filetage et la gestion des exceptions, et quelle version est la "meilleure"?
Les problèmes spécifiques que j'ai rencontrés en utilisant x86_64-win32-seh-rev1
sont:
std::thread
et std::condition_variable
ne sont pas pris en chargeJe peux faire face au problème de débogage, mais ce serait vraiment bien d'avoir des threads C++ 11 fonctionnels.
Veuillez voir cette réponse pour les trois modèles (nain, sjlj et seh) .
Vous pouvez décider quel type de threads vous souhaitez utiliser: threads POSIX ou threads API Windows. Les fils posix ont l'avantage de la portabilité; vous pouvez utiliser votre code sur d'autres plateformes posix (par exemple linux) sans modifications. L'API de threading win32 est uniquement Windows. Si vous êtes à 100% sur Windows et que c'est l'api, ce n'est pas un problème.
Si vous utilisez de nouvelles fonctionnalités C++ comme std::thread
l'impact est moins visible car vous disposez déjà d'une API standard pour le filetage. Je ne sais pas s'il y a vraiment une grande différence si vous n'utilisez pas directement l'api de thread posix-/win32 (peut-être std::thread
poignées natives?)
Voir aussi: threads mingw-w64: posix vs win32
Je suppose que ce n'est qu'un autre numéro de version puisque Mingw (-w64) suit les versions de GCC (4.8.x, 4.9.x etc.). Si vous n'avez pas besoin d'une version spécifique, vous devez utiliser la dernière version.
Si l'exception levée est:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
alors juste lien pthreads - et le problème est résolu.
Si vous n'avez pas de raisons d'utiliser une option spécifique; ma recommandation personnelle:
posix - dwarf - 2
<thread>
, <mutex>
et <future>