在MinGW-W64在线安装程序中,您可以选择多个字段。但是我找不到任何关于此的文件,我所做的猜测并没有给我我想要的行为。
很明显,很多工作已经进入这个项目,所以很遗憾由于缺乏基本文档而导致人们对这种工作的态度不利。“版本”和“架构”字段不言自明,但我遇到的其他字段是(显示为当前安装程序的值):
posix
和win32
dwarf
和sjlj
0
,1
,2
。我在之前安装时选择的值为win32
,seh
和1
(显然选项自那时起已发生变化,但我不知道是什么)。< / p>
每个选项的优缺点是什么,特别是线程模型和异常处理,以及哪个版本是“最佳”?
我使用x86_64-win32-seh-rev1
遇到的具体问题是:
std::thread
和std::condition_variable
不受支持我可以解决调试问题但是使用C ++ 11线程真的很不错。
答案 0 :(得分:22)
请参阅this answer for all three models (dwarf, sjlj and seh)。
您可以决定要使用哪种线程:POSIX线程或Windows API线程。 posix线程具有便携性的优点;您可以在其他posix平台(例如linux)上使用您的代码而无需修改。 win32线程api只是windows。如果你100%在Windows上,并且喜欢api,那就没问题了。
如果您使用新的C ++功能,例如std::thread
,则影响不太明显,因为您已经有了标准的线程API。如果你不直接使用posix- / win32 thread api(也许是std::thread
本机句柄,我不确定是否真的有很大区别?)
另请参阅:mingw-w64 threads: posix vs win32
我猜这只是另一个版本号,因为Mingw(-w64)遵循GCC版本(4.8.x,4.9.x等)。如果您不需要特定版本,则应使用最新版本。
如果抛出的异常是:
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
然后只需链接 pthreads - 问题就解决了。
如果您没有理由使用特定选项;我个人的建议:
posix - dwarf - 2
<thread>
,<mutex>
和<future>