microseconds - usleep c++ linux
std:: this_thread:: sleep_for() y GCC (4)
Confirmó que no funciona aquí también. (Foto reciente de GCC 4.6).
Podría hacer lo obvio y simplemente definirlo antes de incluir cualquier std :: encabezados. Un poco sucio, pero funcionará hasta que GCC lo corrija (a menos que este sea el comportamiento previsto). El #define no debería romper nada de todos modos. Ya sea en origen o en el indicador -D_GLIBCXX_USE_NANOSLEEP a GCC.
Puede intentar usar -std = gnu ++ 0x en lugar de -std = c ++ 0x, ya que gnu ++ 0x a menudo saca cosas como esta.
Cuando intento compilar este sencillo programa:
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
con gcc versión 4.4.3 en Ubuntu 10.04 (32 bit):
$ g++ -std=c++0x -pthread a.cpp -o a
Yo obtengo:
error: ‘sleep_for’ is not a member of ‘std::this_thread’
Miré en el encabezado ''hilo''.
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é _GLIBCXX_USE_NANOSLEEP
no está definido?
¿Cómo consigo este ejemplo para compilar?
Actualización 17 de septiembre de 2012 (jogojapan): Hoy encontré este mismo problema, usando GCC 4.7.1. Me pregunto si hay alguna noticia sobre cómo evitarlo, a menos que defina _GLIBCXX_USE_NANOSLEEP
. Intenté usar -std=gnu11
, pero fue en vano.
También hay un informe de errores viejo y sin resolver para GCC 4.4: https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145
Actualización 19 de octubre de 2012 (jogojapan): El problema ha sido explicado y resuelto por Jonathan Wakely como respuesta a esta pregunta: ¿De qué se trata _GLIBCXX_USE_NANOSLEEP? Esto es particularmente relevante para cualquiera que construya GCC por sí mismo en lugar de usar un paquete ya hecho.
Información adicional, en caso de que ayude a alguien:
No necesito definir _GLIBCXX_USE_NANOSLEEP
en Ubuntu 11.10, gcc 4.6.1, glibc 2.13.
Pero necesito compilar con -D_GLIBCXX_USE_NANOSLEEP en Gentoo, gcc 4.6.1, glibc 2.12.2.
No voy a compilar el sistema Gentoo para actualizar el glibc. Al menos no antes del fin de semana;)
Necesita definir _GLIBCXX_USE_NANOSLEEP
en la parte superior del código fuente.
#define _GLIBCXX_USE_NANOSLEEP //add it top of c++ code
O bien, compilar con el siguiente comando:
g++ a.cpp -o a -std=c++0x -D_GLIBCXX_USE_NANOSLEEP //compile c++ code
./a // run c++ code
Parece funcionar sin la definición de ubuntu 13.04 con la versión 4.7.3 de gcc