Std::chrono now() вызывает очень значительное отклонение в Ubuntu 24.04 под WSL2C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Std::chrono now() вызывает очень значительное отклонение в Ubuntu 24.04 под WSL2

Сообщение Anonymous »

У меня есть алгоритм, который я использую уже много лет для эмуляции часов реального времени в среде, не работающей в режиме реального времени. Он всегда работал исключительно хорошо, пока не был использован в Ubuntu 24.04 в WSL2 в Windows 11. Логика предсказывает по системному времени, когда должен произойти каждый следующий временной шаг, и неоднократно вызывает функцию now() в цикле до тех пор, пока не будет достигнут этот момент времени, а затем продолжает выполнение следующего кадра. При настройке в этой среде возвращаемое значение now() иногда будет значительно смещаться вперед во времени (например, примерно на 25 секунд) между последовательными вызовами. Простое наблюдение за запуском приложения показывает, что дело не в том, что now() возвращает значение примерно за 25 секунд, поскольку все приложение завершится примерно за 5 секунд, тогда как должно было занять около 30. Подразумевается, что вызов now() фактически изменил время на часах. Чтобы убедиться в этом, я включил свой пример кода в сценарий bash, где я мог отслеживать и повторно синхронизировать часы WSL... now() действительно изменяет время часов.
Пример кода был построен в этой среде с использованием g++ и clang++, C++17 и C++20. Тот же эффект наблюдается во всех четырех случаях.
Пример кода работает правильно без изменения времени часов на машине под управлением Ubuntu-24.04 (более старая версия аппаратного обеспечения) и под Windows11. /WSL2/Ubuntu-22.04 (идентичное аппаратное обеспечение)
Я нашел бесчисленное количество сообщений, обсуждающих проблему отклонения тактовой частоты Linux при работе под WSL. Большинство утверждают, что «решили» проблему путем повторной синхронизации с аппаратными часами. Это не «исправляет» проблему дрейфа, а просто сбрасывает ее. Где-то в системе явно глюк, может ли это быть связано? Is now() в некоторых конфигурациях WSL, влияющих на время, и это мой крайний случай, когда я вбиваю now() в цикл, просто произнося проблему. Как это исправить?
воспроизводимый пример кода:

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

void print(std::chrono::duration elapsed_seconds,
std::chrono::_V2::system_clock::time_point,
std::chrono::duration error);

int main()
{
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79010308/stdchrono-now-induces-very-significant-drift-with-ubuntu-24-04-under-wsl2[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Сельдерей: «Значительное отклонение от»
    Гость » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Гость
  • «Законно» определить часы STD :: Chrono, который на самом деле не предлагает функцию now ()?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • «Законно» определить часы STD :: Chrono, который на самом деле не предлагает функцию now ()?
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Является ли now() в LocalDate.now() конструктором? [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Libfmt 9.1: формат `chrono :: time_point ` как UTC
    Anonymous » » в форуме C++
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»