Worum geht es bei _GLIBCXX_USE_NANOSLEEP?

Ein Präprozessor-Makro mit dem Namen _GLIBCXX_USE_NANOSLEEP wird in zwei Standardheaderdateien angezeigt:

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

In einer Standardversion von GCC 4.7.1 (Linux, 64-Bit) das einzige, wasc ++ config.h Beinhaltet ist dieser Kommentar:

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

Während inFaden, Die Definition vonstd::this_thread::sleep_for() undstd::this_thread::sleep_until() abhängig von dem zu definierenden Makro. Wenn es nicht definiert ist, werden auch nicht beide Funktionen definiert, obwohl dies vom C ++ - Standard verlangt wird.

Auf meinem System (glibc 2.15) ist das Makro nicht definiert, obwohl dasnanosleep() Funktion (deklariert inctime) existiert und ist betriebsbereit.

Ich würde gerne wissen, worum es geht und wie ich damit umgehen soll. Speziell:

Gibt es eine Konfigurationsoption, die beim Erstellen von GCC verwendet werden sollte, um dieses Makro standardmäßig zu aktivieren, wie von vorgeschlagendieser Beitrag? (Ich konnte keine in der findenOnline-Dokumentation des Erstellungsprozesses.)Gibt es wirklich eine Beziehung zwischen dernanosleep() Funktion und das Makro? Die Erklärung vonnanosleep() imctime/time.h scheint nicht vom Makro abzuhängen oder dieses zu definieren.Besteht ein spezifisches Risiko bei der Definition des Makros in meinen eigenen Header-Dateien oder als-D Option in der Befehlszeile (wie in empfohlen)diese verwandte Frage)? Was ist, wenn ich das auf einem System wo machenanosleep() ist nicht verfügbar, und wie kann ich das tatsächlich herausfinden?

Aktualisieren Ab GCC 4.8 Unterstützung fürstd::this_thread::sleep_for() und ähnliches ist automatisch in libstdc ++ enthalten. Es ist kein Konfigurationsflag mehr erforderlich. Vondas GCC 4.8 Änderungsprotokoll:

this_thread :: sleep_for (), this_thread :: sleep_until () und this_thread :: yield () werden definiert, ohne dass die configure-Option --enable-libstdcxx-time erforderlich ist.

Beachten Sie jedoch die weiteren Details zu GCC 4.8 und 4.9 in Jonathans Antwort.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage