Spec-Zone.ru › C++

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
(общедоступная статическая константа-член)

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

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

Примечания

Использование high_resolution_clock вызывало некоторые споры. Ховард Хиннант, утверждающий, что именно он предложил добавить high_resolution_clock в язык, в 2016 году заявил в списке рассылки ISO C++ Standard - Discussion, что поддерживает его устаревание. Он обосновал это тем, что стандарт допускает псевдонимизацию для 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].

См. также

system_clock
(C++11)
системное время по часам реального времени всей системы
(класс)
steady_clock
(C++11)
монотонные часы, которые никогда не корректируются
(класс)

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

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/high_resolution_clock

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API