Что такое _GLIBCXX_USE_NANOSLEEP?

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

C ++ / 4.7.1 / x86_64-неизвестно-Linux-гну / бит / с ++ config.hC ++ / 4.7.1 / резьба

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

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

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

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

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

Есть ли параметр конфигурации, который следует использовать при сборке GCC для активации этого макроса по умолчанию, как это предлагаетсяэта почта? (Я не могне найти вонлайн документация по процессу сборки.)Есть ли действительно связь междуnanosleep() функция и макрос? Декларацияnanosleep() в /ctimetime.h похоже, не зависит и не определяет макрос.Есть ли какой-то определенный риск, связанный с определением макроса в моих собственных заголовочных файлах, или как-D опция в командной строке (как предложено вэтот связанный вопрос)? Что делать, если я делаю это в системе, гдеnanosleep() недоступен, и как я могу на самом деле узнать?

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

this_thread :: sleep_for (), this_thread :: sleep_until () и this_thread :: yield () определяются без использования параметра конфигурации --enable-libstdcxx-time;

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

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

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