Namespaces
Variants

std::chrono:: high_resolution_clock

From cppreference.net
std::chrono::high_resolution_clock
Определено в заголовке <chrono>
class high_resolution_clock ;
(начиная с C++11)

Класс std::chrono::high_resolution_clock представляет часы с наименьшим периодом тика, предоставляемые реализацией. Он может быть псевдонимом для std::chrono::system_clock или std::chrono::steady_clock , либо третьими, независимыми часами.

std::chrono::high_resolution_clock соответствует требованиям TrivialClock .

Содержание

Типы членов

Тип Определение
rep арифметический тип, представляющий количество тактов в продолжительности часов
period тип std::ratio , представляющий период такта часов в секундах
duration std:: chrono :: duration < rep, period >
time_point std:: chrono :: time_point < std :: chrono :: high_resolution_clock >

Константы-члены

constexpr bool is_steady
[static]
true если время между тактами всегда постоянно, т.е. вызовы now() возвращают значения, которые монотонно возрастают даже в случае корректировки внешних часов, иначе false
(публичная статическая константа-член)

Функции-члены

[static]
возвращает std::chrono::time_point представляющий текущее значение часов
(публичная статическая функция-член)

Примечания

Вокруг использования high_resolution_clock возникли некоторые разногласия. Ховард Хиннант, который утверждает, что ввёл high_resolution_clock в язык, заявил в 2016 году в списке рассылки обсуждений стандарта ISO C++ , что выступает за его устаревание. Его аргументация заключалась в том, что, поскольку стандарт допускает его псевдоним для std::chrono::steady_clock или std::chrono::system_clock , его использование добавляет неопределённость в программу без преимуществ. Однако другие участники дискуссии высказались в его пользу, например, на том основании, что поскольку ни std::chrono::steady_clock , ни std::chrono::system_clock не сопровождаются какими-либо гарантиями разрешения, high_resolution_clock играет полезную роль, предоставляя поставщику возможность поставить высокоточные часы платформы, когда ни его std::chrono::steady_clock , ни его std::chrono::system_clock таковыми не являются.

Обычно это просто псевдоним для std::chrono::steady_clock или std::chrono::system_clock , но конкретный выбор зависит от библиотеки или конфигурации. Когда используется system_clock , он не является монотонным (например, время может идти назад). Например, по состоянию на 2023 год, libstdc++ использует псевдоним system_clock "до тех пор, пока не станут доступны определения с точностью выше наносекунды" [1] , MSVC использует steady_clock [2] , а libc++ использует steady_clock когда реализация стандартной библиотеки C++ поддерживает монотонные часы, и system_clock в противном случае [3] .

Смотрите также

системные часы реального времени
(класс)
монотонные часы, которые никогда не корректируются
(класс)

Внешние ссылки

  1. libstdc++ <chrono.h>
  2. MSVC high_resolution_clock
  3. libc++ <high_resolution_clock.h>