在MinGW-W64在线安装程序中,您可以select几个字段。 不过,我找不到任何文件,我做的猜测不给我我想要的行为。
显然,这个项目已经做了很多工作,所以看起来可惜的是,由于缺乏基本的文档资料,这个问题被阻碍了。
“版本”和“体系结构”字段是不言自明的,但我遇到的其他字段是(以当前安装程序显示的值):
posix
和win32
dwarf
和sjlj
0
。 在我以前的安装中select的值是win32
, seh
和1
(显然这个选项自那时以来已经改变了,但是我不明白什么是什么)。
每个选项有哪些优缺点,特别是线程模型和exception处理,以及哪个版本是“最好的”?
我遇到的使用x86_64-win32-seh-rev1
的具体问题是:
std::thread
和std::condition_variable
我可以应付debugging问题,但是如果能够使用C ++ 11线程将会非常好。
请看这三个模型的答案(矮人,sjlj和se) 。
您可以决定要使用的线程类型:POSIX线程或Windows API线程。 posix线程具有便携性的优点; 你可以在没有修改的情况下在其他posix平台(例如linux)上使用你的代码。 win32线程API只是windows。 如果你是100%的窗口,喜欢它的API,这是没有问题,但。
如果你使用新的C ++特性如std::thread
,那么由于你已经有了一个标准的线程API,所以这个影响不太明显。 我不确定是否真的有很大的不同,如果你不直接使用posix- / win32线程api(也许std::thread
原生句柄?)
另请参阅: mingw-w64线程: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>