Una macro preprocesador llamada _GLIBCXX_USE_NANOSLEEP aparece en dos archivos de cabecera estándar:¿De qué se trata _GLIBCXX_USE_NANOSLEEP?
- C++/4.7.1/x86_64-unknown-linux-gnu/bits/C++ config.h
- C++/4.7.1/hilo
En una versión por defecto de GCC 4.7.1 (Linux, 64 bits) lo único C++ config.hy incluye este comentario es:
/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
Mientras que en hilo, la definición de std::this_thread::sleep_for()
y std::this_thread::sleep_until()
dependen de la macro por definir. Si no está definido, tampoco se definirán las dos funciones – aunque sean requeridas por el Estándar C++ –.
En mi sistema (glibc 2.15), la macro no está definida, aunque la función nanosleep()
(declarada en ctime
) existe y está operativa.
Me gustaría saber de qué se trata y cómo solucionarlo. Específicamente:
- ¿Hay una opción de configuración que se debe utilizar en la construcción de GCC para activar esta macro por defecto, según lo sugerido por this post? (No pude encontrar ninguno en el online documentation of the build process.)
- ¿Existe realmente una relación entre la función
nanosleep()
y la macro? La declaración denanosleep()
enctime
/time.h
no parece depender de, o definir, la macro. - ¿Hay algún riesgo específico involucrado en la definición de la macro en mis propios archivos de encabezado, o como una opción
-D
en la línea de comandos (como se sugiere en this related question)? ¿Qué sucede si hago esto en un sistema dondenanosleep()
no está disponible, y cómo puedo averiguarlo?
actualización De GCC 4.8 en adelante, el apoyo a std::this_thread::sleep_for()
y similares se incluye automáticamente en libstdC++. No se requiere ninguna bandera de configuración. De the GCC 4.8 change log:
this_thread :: sleep_for(), this_thread :: sleep_until() y this_thread :: rendimiento() se definen sin requerir la opción de configuración-libstdcxx tiempo --enable;
Pero tenga en cuenta los detalles sobre esto para GCC 4.8 y 4.9 dados en la respuesta de Jonathan.
¿Lo compiló usted mismo, o es un C++ proporcionado por el desarrollador? – nneonneo
@nneonneo Lo construí siguiendo las [descripciones de compilación] (http://gcc.gnu.org/install/), sin usar opciones especiales, excepto directorios específicos del usuario. – jogojapan
En cualquier punto, ¿'configure' chequea' nanosleep'? ¿Qué decía? – nneonneo