Класс high_resolution_clock
Класс high_resolution_clock представляет собой часы с наименьшим возможным периодом тика, доступным в системе. Он используется для измерения очень коротких интервалов времени с максимальной точностью. Этот класс не имеет конструктора и не может быть создан как объект. Вместо этого он предоставляет статические методы для получения текущего времени. Класс high_resolution_clock является псевдонимом либо для system_clock, либо для steady_clock, в зависимости от реализации стандартной библиотеки. Основное его преимущество - это минимальный шаг времени (период), который можно получить с помощью вложенного типа period.
Синтаксис
#include <chrono>
std::chrono::high_resolution_clock::now();
Пример
Давайте измерим время выполнения простого цикла с помощью high_resolution_clock. Для этого зафиксируем время до и после цикла и вычислим разницу:
#include <iostream>
#include <chrono>
int main()
{
auto start = std::chrono::high_resolution_clock::now();
// Some work
volatile int sum = 0;
for (int i = 0; i < 1000000; ++i)
{
sum += i;
}
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
std::cout << "Duration: " << duration.count() << " microseconds" << std::endl;
return 0;
}
Результат выполнения кода (значение зависит от производительности системы):
"Duration: 1234 microseconds"
Пример
Давайте выведем период тика high_resolution_clock, чтобы понять его точность:
#include <iostream>
#include <chrono>
int main()
{
using namespace std::chrono;
using period = high_resolution_clock::period;
std::cout << "Period: " << period::num << "/" << period::den << " seconds" << std::endl;
return 0;
}
Результат выполнения кода (зависит от системы, например, для наносекунд):
"Period: 1/1000000000 seconds"
Смотрите также
-
класс
steady_clock,
который представляет монотонные часы -
класс
system_clock,
который представляет системные часы реального времени -
метод
now,
который возвращает текущий момент времени -
класс
time_point,
который представляет точку во времени