Класс duration
Класс duration из заголовочного файла <chrono> представляет собой интервал времени. Он позволяет хранить и обрабатывать временные промежутки с различной точностью: от наносекунд до часов. Первым параметром шаблона задается тип для хранения количества тиков, а вторым - тип периода, который определяет длительность одного тика в секундах.
Класс duration активно используется для измерения времени выполнения кода, организации задержек и выполнения арифметических операций над временными интервалами.
Синтаксис
std::chrono::duration<Rep, Period>
Здесь Rep - тип данных для хранения количества тиков (например, int или double), а Period - тип периода, определяющий длительность одного тика (например, std::ratio<1, 1000> для миллисекунд).
Пример
Давайте создадим объект duration, представляющий 5 секунд, и выведем количество тиков:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
duration<int, ratio<1>> d(5);
cout << d.count() << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте создадим 2 секунды и 500 миллисекунд, а затем сложим их и выведем результат в миллисекундах:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
seconds sec(2);
milliseconds ms(500);
auto res = sec + ms;
cout << duration_cast<milliseconds>(res).count() << endl;
return 0;
}
Результат выполнения кода:
2500
Пример
Давайте измерим время выполнения простого цикла с помощью класса duration:
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
auto start = steady_clock::now();
for (int i = 0; i < 1000000; i++)
{
int x = i * 2;
}
auto end = steady_clock::now();
auto res = duration_cast<microseconds>(end - start);
cout << res.count() << endl;
return 0;
}
Результат выполнения кода (значение может отличаться в зависимости от производительности):
1523
Смотрите также
-
метод
count,
который возвращает количество тиков -
функция
duration_cast,
которая преобразует один duration в другой -
класс
seconds,
который представляет секунды -
класс
milliseconds,
который представляет миллисекунды