Una macro preprocessore chiamato _GLIBCXX_USE_NANOSLEEP appare in due file di intestazione standard:Che cosa è _GLIBCXX_USE_NANOSLEEP?
- C++/4.7.1/x86_64-unknown-linux-gnu/bit/C++ config.h
- C++/4.7.1/filo
In un accumulo di default di GCC 4.7.1 (Linux, 64-bit) l'unica cosa C++ config.h include è questo commento:
/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
considerando filo, la definizione di std::this_thread::sleep_for()
e std::this_thread::sleep_until()
dipendono dalla macro da definire. Se non è definito, entrambe le funzioni –, sebbene richieste dallo standard C++ –, non saranno definite neanche.
Sul mio sistema (glibc 2.15), la macro non è definita, anche se la funzione nanosleep()
(dichiarata in ctime
) esiste ed è operativa.
Mi piacerebbe sapere di cosa si tratta e come gestirlo. In particolare:
- Esiste un'opzione di configurazione che dovrebbe essere utilizzato quando si costruisce GCC per attivare questa macro per impostazione predefinita, come suggerito da this post? (Non sono riuscito a trovarne nello online documentation of the build process.)
- Esiste davvero una relazione tra la funzione
nanosleep()
e la macro? La dichiarazione dinanosleep()
inctime
/time.h
non sembra dipendere o definire la macro. - Esiste qualche rischio specifico nella definizione della macro nei miei file di intestazione o come opzione
-D
nella riga di comando (come suggerito in this related question)? Cosa succede se lo faccio su un sistema in cuinanosleep()
non è disponibile e come posso effettivamente scoprirlo?
aggiornamento Da GCC 4.8 in poi, il supporto per std::this_thread::sleep_for()
e simili è automaticamente incluso nella libstdC++. Non è più richiesto alcun flag di configurazione. Da the GCC 4.8 change log:
this_thread :: sleep_for(), this_thread :: sleep_until() e this_thread :: resa() sono definite senza richiedere l'opzione di configurazione --enable-libstdcxx-tempo;
Ma si noti gli ulteriori dettagli su questo per GCC 4.8 e 4.9 dato nella risposta di Jonathan.
Lo hai creato da solo o è un C++ fornito dal manutentore? – nneonneo
@nneonneo L'ho creato seguendo le [build descriptions] (http://gcc.gnu.org/install/), senza usare opzioni speciali ad eccezione delle directory specifiche dell'utente. – jogojapan
In qualsiasi momento, 'configure' verifica la presenza di' nanosleep'? Che cosa diceva? – nneonneo