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 / threadEm 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.