¿De qué se trata _GLIBCXX_USE_NANOSLEEP?
Una macro del preprocesador llamada _GLIBCXX_USE_NANOSLEEP aparece en dos archivos de encabezado estándar:
c ++ / 4.7.1 / x86_64-unknown-linux-gnu / bits / c ++ config.hc ++ / 4.7.1 / threadEn una compilación predeterminada de GCC 4.7.1 (Linux, 64 bits), lo únicoc ++ config.h incluye es este comentario:
/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
Mientras enhilo, la definición destd::this_thread::sleep_for()
ystd::this_thread::sleep_until()
Depende de la macro a definir. Si no está definido, tampoco se definirán ambas funciones, aunque son requeridas por el Estándar de C ++.
En mi sistema (glibc 2.15), la macro no está definida, aunque lananosleep()
función (declarada enctime
) existe y está operativo.
Me gustaría saber de qué se trata y cómo lidiar con eso. Específicamente:
¿Existe alguna opción de configuración que deba usarse al crear GCC para activar esta macro de forma predeterminada, como lo sugiereesta publicación? (No pude encontrar ninguna en elDocumentación en línea del proceso de construcción..)¿Existe realmente una relación entre elnanosleep()
función y la macro? La declaracion denanosleep()
enctime
/time.h
No parece depender de, o definir, la macro.¿Existe algún riesgo específico relacionado con la definición de la macro en mis propios archivos de encabezado, o como-D
opción en la línea de comando (como se sugiere enesta pregunta relacionada)? ¿Qué pasa si hago esto en un sistema dondenanosleep()
no está disponible, y ¿cómo puedo averiguarlo?Actualizar A partir de GCC 4.8, soporte parastd::this_thread::sleep_for()
y similares se incluye automáticamente en libstdc ++. Ya no se requiere ningún indicador de configuración. Desdeel registro de cambios de GCC 4.8:
this_thread :: sleep_for (), this_thread :: sleep_until () y this_thread :: yield () se definen sin requerir la opción de configuración --enable-libstdcxx-time;
Pero tenga en cuenta los detalles adicionales sobre esto para GCC 4.8 y 4.9 que figuran en la respuesta de Jonathan.