我正在为我当前的项目尝试一些c ++ 11线程支持但面临瓶颈。我使用rubenvb构建的gcc 4.8.0(直接从sourceforge下载)[x86_64-w64-mingw32-gcc-4.8.0-win64_rubenvb],发现它似乎不支持c ++ 11线程功能。以下代码无法编译并抱怨'thread' is not a member of 'std'
。通过谷歌搜索,有一个4.7实验内置(也通过rubenvb)与std线程支持。作为我的主要项目的一部分需要4.8版本的其他C ++ 11功能,我还没有尝试4.7版本。请帮助澄清我下载的工具链是否支持线程。
平台:Window x64,Qt 4.8(使用下载的gcc工具链从源代码构建)
更新:刚刚下载了实验4.8版本[x86_64-w64-mingw32-gcc-4.8-stdthread-win64_rubenvb]并编译了测试代码。所以现在的问题是
"'实验'版本安全使用?"
使用的测试代码
#include <iostream>
#include <thread>
#include <mutex> // try other c++11 threading feature
void doSomeWork( void ) { std::cout << "hello from thread..." << std::endl; }
int main() {
std::mutex m; // also fail here
std::thread t( doSomeWork );
t.join();
return 0;
}
和使用makefile
CC := g++
SRC := test$(BUILD).cpp
OBJ := $(SRC:.cpp=.o)
BIN := test$(BUILD).exe
CXXFLAGS := -std=c++0x -Wall -Wextra -O0 -ggdb -lpthread -mthreads -pthread -Wno-unknown-pragmas
clean : ; del /a/s $(BIN) $(OBJ)
all : $(BIN) ; del $(OBJ)
$(BIN) : $(OBJ) ; $(CC) $(CXXFLAGS) $^ -o $@
%.o : %.cpp ; $(CC) -c $(CXXFLAGS) $< -o $@
.PHONY: clean all
答案 0 :(得分:2)
如果您使用的是win32,那么Mingw-Builds似乎有两种不同的线程模型:
Mingw-Builds(和实验性rubenvb软件包)也让你 在(lib)gcc:
内部使用的线程模型之间进行选择posix(基于MinGW-w64的winpthreads构建)“POSIX的实现 win32的线程也可以在实验目录下找到。
- 它的主要目标是支持C ++ 11标准线程,它支持 目前只使用POSIX线程。“ http://mingw-w64.sourceforge.net/
- 启用C ++ 11库功能 包含在头文件中,mutex和future中。
- 性能 特定情况下的退化。 C ++ 11的功能是 显着慢于本机Win32实现甚至 MSVS2012的实施。
win32使用本机Win32线程 功能。
- 没有C ++ 11主题,互斥锁或未来
- 最佳表现