Что такое _GLIBCXX_USE_NANOSLEEP?

Макрос препроцессора с именем _GLIBCXX_USE_NANOSLEEP появляется в двух стандартных заголовочных файлах:

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

В стандартной сборке GCC 4.7.1 (Linux, 64-bit) единственноеc++config.h включает в себя этот комментарий:

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

Тогда как вthreadопределениеstd::this_thread::sleep_for() а такжеstd::this_thread::sleep_until() зависит от макроса, который будет определен. Если это не определено, обе функции & # x2013; хотя требуется стандартом C ++ & # x2013; также не будет определен.

В моей системе (glibc 2.15) макрос не определен, хотяnanosleep() функция (объявлена вctime) существует и работает.

Мне бы хотелось узнать, что это такое и как с этим бороться. В частности:

Is there a configuration option that should be used when building GCC to activate this macro by default, as suggested by this post? (I couldn't find any in the online documentation of the build process.) Is there really a relation between the nanosleep() function and the macro? The declaration of nanosleep() in ctime/time.h does not seem to depend on, or define, the macro. Is there any specific risk involved in defining the macro in my own header files, or as a -D option on the command line (as suggested in this related question)? What if I do this on a system where nanosleep() is not available, and how can I actually find out?

Update Начиная с GCC 4.8, поддержкаstd::this_thread::sleep_for() и тому подобное автоматически включается в libstdc ++. Флаг настройки больше не требуется. Отжурнал изменений GCC 4.8:

this_thread::sleep_for(), this_thread::sleep_until() and this_thread::yield() are defined without requiring the configure option --enable-libstdcxx-time;

Но обратите внимание на более подробную информацию об этом для GCC 4.8 и 4.9, приведенную в ответе Джонатана.

Ответы на вопрос(1)

Ваш ответ на вопрос