O czym jest _GLIBCXX_USE_NANOSLEEP?
Makro preprocesora o nazwie _GLIBCXX_USE_NANOSLEEP pojawia się w dwóch standardowych plikach nagłówkowych:
c ++ / 4.7.1 / x86_64-unknown-linux-gnu / bits / c ++ config.hc ++ / 4.7.1 / threadW domyślnej wersji GCC 4.7.1 (Linux, 64-bit) jedyna rzeczc ++ config.h zawiera ten komentarz:
/* Defined if nanosleep is available. */
/* #undef _GLIBCXX_USE_NANOSLEEP */
Ale wwątek, definicjastd::this_thread::sleep_for()
istd::this_thread::sleep_until()
zależą od zdefiniowanego makra. Jeśli nie zostanie zdefiniowane, obie funkcje - chociaż wymagane przez C ++ Standard - również nie zostaną zdefiniowane.
W moim systemie (glibc 2.15) makro nie jest zdefiniowane, chociażnanosleep()
funkcja (zadeklarowana wctime
) istnieje i działa.
Chciałbym wiedzieć, o co w tym wszystkim chodzi i jak sobie z tym poradzić. Konkretnie:
Czy istnieje opcja konfiguracji, która powinna być używana podczas budowania GCC, aby aktywować to makro domyślnie, jak sugerujeten post? (Nie mogłem znaleźć żadnego wdokumentacja online procesu budowy.)Czy rzeczywiście istnieje związek międzynanosleep()
funkcja i makro? Deklaracjananosleep()
wctime
/time.h
nie wydaje się zależeć od makra ani go definiować.Czy istnieje jakieś szczególne ryzyko związane z definiowaniem makra w moich plikach nagłówkowych lub jako-D
opcja w linii poleceń (jak sugerowano wto powiązane pytanie)? Co jeśli zrobię to w systemie, gdzienanosleep()
nie jest dostępny i jak mogę się tego dowiedzieć?Aktualizacja Począwszy od wersji GCC 4.8, wsparcie dlastd::this_thread::sleep_for()
i podobnie jest automatycznie dołączany do libstdc ++. Nie jest już wymagana flaga konfiguracji. Zdziennik zmian GCC 4.8:
this_thread :: sleep_for (), this_thread :: sleep_until () i this_thread :: yield () są zdefiniowane bez wymagania opcji configure --enable-libstdcxx-time;
Ale zwróć uwagę na dalsze szczegóły dotyczące GCC 4.8 i 4.9 podane w odpowiedzi Jonathana.