三件事(编译器、IDE 和操作系统)在这里都很重要。
1) 编译器:GCC 4.6 已经有很好的 C++11 支持并且有<thread>
和<chrono>
头文件。但是你必须用-std=c++0x
. 如果您使用 IDE,则必须将其配置为生成这样的 make(因此请检查编译器选项)
2) 操作系统也很重要:<thread>
标头本质上是一组围绕 POSIX 概念的 ptherad、mutex 和 condition_variable 的包装器。在 Windows 上,condition_variable 仅从 0x600 (Vista) 本地存在,直到 0x505 (XP) 您必须处理本地“同步事件对象”,它们可以等效,但具有不同的语义(boost::thread
实现适配器,但 GCC只是跳过整个线程实现:因此...如果您正在为更多操作系统编写代码,请检查您是否正在使用所有操作系统上都存在的库实现!)
3) IDE 也有它的重要性:编辑器解析文本和显示完成信息的方式,以及“键入时语法错误”等不取决于编译器,而是取决于他们使用的解析器。特别是,当 GCC 配置为 -std=c++0X 时,它假定__GXX_EXPERIMENTAL_CXX0X__
符号的隐式定义,这不是 IDE 自动假定的(错误地解析标头)您还必须配置 IDE 以考虑__GXX_EXPERIMENTAL_CXX0X__
解析时符号为“已定义”。
您的问题很可能与第 3 点有关