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++ 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].
См. также
|
(C++11) | системное время по часам реального времени всей системы (класс) |
|
(C++11) | монотонные часы, которые никогда не корректируются (класс) |
Внешние ссылки
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/high_resolution_clock