microseconds c++ concurrency c++11 g++

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