我正在Windows上安装mingw-w64,有两个选项:win32线程和posix线程.我知道win32线程和pthreads之间的区别是什么,但我不明白这两个选项之间的区别.我怀疑如果我选择posix线程,它将阻止我调用WinTI函数,如CreateThread.
看来这个选项指定某些程序或库将使用哪个线程API,但是通过什么?通过GCC,libstdc ++还是别的什么?
我发现了这个: 在windows的gcc端口中thread_posixs和thread_win32之间的区别是什么?
简而言之,对于这个版本的mingw,threads-posix版本将使用posix API并允许使用std :: thread,而threads-win32将使用win32 API,并禁用std :: thread部分标准.
好的,如果我将选择win32线程,那么std :: thread将不可用,但仍将使用win32线程.但用什么?
在MinGW-W64在线安装程序中,您可以选择几个字段.但是我找不到任何关于此的文件,我所做的猜测并没有给我我想要的行为.
很明显,很多工作已经进入这个项目,所以很可惜因为缺乏基本文档而受到阻碍.
"版本"和"架构"字段是不言自明的,但我遇到的其他字段是(显示为当前安装程序的值):
posix
和win32
dwarf
和sjlj
0
,1
,2
.我在之前的安装中选择的值是win32
,seh
并且1
(从那时起显然选项已经改变,但我不知道什么是什么).
每个选项的优缺点是什么,特别是线程模型和异常处理,以及哪个版本"最佳"?
我遇到的具体问题x86_64-win32-seh-rev1
是:
std::thread
并且std::condition_variable
不受支持我可以解决调试问题但是使用C++ 11线程真的很棒.
我尝试使用std :: this_thread :: sleep_for()函数,但得到了错误
error: 'std::this_thread' has not been declared
.
标志_GLIBCXX_USE_NANOSLEEP包括在内.
还需要什么来强迫它发挥作用?
MinGW ==> gcc版本4.7.2(GCC)
SSCCE:
#include<thread>
int main() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
Run Code Online (Sandbox Code Playgroud)
命令行:
g++ -D_GLIBCXX_USE_NANOSLEEP -std=gnu++0x ssce.cpp -o ssce.exe
Run Code Online (Sandbox Code Playgroud)
编译结果:
ssce.cpp: In function 'int main()':
ssce.cpp:4:8: error: 'std::this_thread' has not been declared
Run Code Online (Sandbox Code Playgroud) 我尝试在c ++中编译一个简单的c ++代码,但是当我尝试在Windows中使用g ++编译它时,总是返回错误。
我用
g++ -std=c++0x -pthread main.cpp
Run Code Online (Sandbox Code Playgroud)
错误消息是:
std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?
Run Code Online (Sandbox Code Playgroud)
这没有意义,因为代码只是
#include<thread>
void f(int i) {}
int main() {
std::thread t(f, 1);
t.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我相信这段代码可以在linux上运行,我想知道为什么它不能在Windows下运行。