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]
.
Смотрите также
|
(C++11)
|
системные часы реального времени
(класс) |
|
(C++11)
|
монотонные часы, которые никогда не корректируются
(класс) |