【发布时间】:2011-05-25 04:43:56
【问题描述】:
当我尝试编译这个简单的程序时:
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
在 Ubuntu 10.04(32 位)上使用 gcc 版本 4.4.3:
$ g++ -std=c++0x -pthread a.cpp -o a
我明白了:
error: ‘sleep_for’ is not a member of ‘std::this_thread’
我查看了标题“线程”。
sleep_for() 受 _GLIBCXX_USE_NANOSLEEP 保护
#ifdef _GLIBCXX_USE_NANOSLEEP
...
/// sleep_for
template<typename _Rep, typename _Period>
inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
...
为什么没有定义_GLIBCXX_USE_NANOSLEEP?
如何编译这个例子?
2012 年 9 月 17 日更新(jogojapan):我今天遇到了同样的问题,使用的是 GCC 4.7.1。我想知道除了定义_GLIBCXX_USE_NANOSLEEP之外,是否有任何关于如何避免它的消息。我尝试使用-std=gnu11,但无济于事。
还有一个旧的、未解决的 GCC 4.4 错误报告:https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145
2012 年 10 月 19 日更新(jogojapan):该问题现已由 Jonathan Wakely 作为对此问题的回答进行了解释和解决:What is _GLIBCXX_USE_NANOSLEEP all about? 这对于任何自己构建 GCC 而不是使用现成包的人来说尤其重要。
【问题讨论】:
标签: c++ concurrency c++11 g++