Проблема в реализации std::this_thread:sleep_until(..)
, которая вызывает sleep_for(..)
, которая вызывает nanosleep()
.
(см. gnu sources , строка 271.)
См. Следующие вопросы по Stackoverflow:
Похоже, вам не нужно высокое разрешение nanosleep()
.Вы можете написать собственное решение с разрешительной лицензией с открытым исходным кодом и позвонить по номеру sleep()
вместо nanosleep().
Если вам нужно разрешение менее секунды, я рекомендую использовать метод вызова select()
вместо nanosleep()
.select()
предназначен для очень эффективного блокирования при задержках менее секунды, и большинство операционных систем достаточно точно соблюдает параметр тайм-аута, что полезно для синхронизации менее секунды при работе ЦП.
Вы можете дажесоздайте сокет с целью перехода к select()
, в параметре error_fds
, где сокет может использоваться как перекрестный поток "сигнал", когда он передается в close()
и становится сокетом состояния "ошибка".