Cuando intento compilar este sencillo programa:std :: :: this_thread sleep_for() y GCC
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
con la versión de gcc 4.4.3 en Ubuntu 10.04 (32 bits):
$ g++ -std=c++0x -pthread a.cpp -o a
obtengo:
error: ‘sleep_for’ is not a member of ‘std::this_thread’
Miré en el encabezado 'thread'.
sleep_for() está protegido con _GLIBCXX_USE_NANOSLEEP
#ifdef _GLIBCXX_USE_NANOSLEEP
...
/// sleep_for
template<typename _Rep, typename _Period>
inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
...
¿Por qué no _GLIBCXX_USE_NANOSLEEP
definido?
¿Cómo consigo este ejemplo para compilar?
actualización 17 de Sep 2012 (jogojapan): me encontré con este mismo problema hoy en día, usando GCC 4.7.1. Me pregunto si hay alguna noticia sobre cómo evitarlo, que no sea definiendo _GLIBCXX_USE_NANOSLEEP
. Intenté usar -std=gnu11
, pero fue en vano.
También hay un viejo, informe de errores sin resolver para GCC 4.4: https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145
Actualización 19 Oct 2012 (jogojapan): El problema ya se ha explicado y resuelto por Jonathan Wakely como anwer a esta pregunta: What is _GLIBCXX_USE_NANOSLEEP all about? Esto es particularmente relevante para cualquiera que construya GCC por sí mismo en lugar de usar un paquete ya hecho.
mismo problema en puertos mac osx mac 4.7.2 gcc con la solución del 'fix -D_GLIBCXX_USE_NANOSLEEP' se – pyCthon