O que é o _GLIBCXX_USE_NANOSLEEP?

Uma macro de pré-processador chamada _GLIBCXX_USE_NANOSLEEP aparece em dois arquivos de cabeçalho padrão:

c ++ / 4.7.1 / x86_64-desconhecido-linux-gnu / bits / c ++ config.hc ++ / 4.7.1 / thread

Em uma versão padrão do GCC 4.7.1 (Linux, 64 bits) a única coisac ++ config.h inclui é este comentário:

/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */

Considerando quefio, a definição destd::this_thread::sleep_for() estd::this_thread::sleep_until() depende da macro a ser definida. Se não estiver definido, ambas as funções - embora exigidas pelo C ++ Standard - também não serão definidas.

No meu sistema (glibc 2.15), a macro não está definida, embora onanosleep() função (declarada emctime) existe e está operacional.

Eu gostaria de saber o que é isso e como lidar com isso. Especificamente:

Existe uma opção de configuração que deve ser usada ao criar o GCC para ativar essa macro por padrão, como sugerido poresta postagem? (Eu não consegui encontrar nenhum nodocumentação online do processo de construção.)Existe realmente uma relação entre onanosleep() função e a macro? A declaração denanosleep() emctime/time.h não parece depender ou definir a macro.Existe algum risco específico envolvido na definição da macro em meus próprios arquivos de cabeçalho, ou como um-D opção na linha de comando (como sugerido emesta questão relacionada) E se eu fizer isso em um sistema ondenanosleep() não está disponível e como posso realmente descobrir?

Atualizar Do GCC 4.8 em diante, suporte parastd::this_thread::sleep_for() e o semelhante é automaticamente incluído no libstdc ++. Nenhum sinalizador de configuração é mais necessário. Deo log de alteração do GCC 4.8:

this_thread :: sleep_for (), this_thread :: sleep_until () e this_thread :: yield () são definidos sem requerer a opção configure --enable-libstdcxx-time;

Mas observe os detalhes adicionais sobre isso para o GCC 4.8 e 4.9 dados na resposta de Jonathan.

questionAnswers(1)

yourAnswerToTheQuestion