Класс steady_clock
Класс steady_clock из заголовочного файла <chrono> представляет
собой монотонные часы, которые никогда не корректируются и не идут назад.
Это делает их идеальными для измерения длительности интервалов времени.
В отличие от system_clock, значения steady_clock не связаны
с реальным календарным временем, а представляют собой просто тики,
которые монотонно возрастают. Класс не принимает параметров и содержит
статический метод now, возвращающий текущую точку времени,
а также типы rep, period, duration и time_point.
Синтаксис
#include <chrono>
std::chrono::steady_clock::now();
std::chrono::steady_clock::time_point tp;
std::chrono::steady_clock::duration d;
std::chrono::steady_clock::rep r;
std::chrono::steady_clock::period p;
Пример
Давайте измерим время выполнения цикла с помощью steady_clock:
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
auto start = chrono::steady_clock::now();
long long sum = 0;
for (int i = 0; i < 1000000; i++)
{
sum += i;
}
auto end = chrono::steady_clock::now();
auto diff = end - start;
cout << "Sum: " << sum << endl;
cout << "Time: "
<< chrono::duration_cast<chrono::milliseconds>(diff).count()
<< " ms" << endl;
return 0;
}
Результат выполнения кода:
"Sum: 499999500000"
"Time: 2 ms"
Пример
Давайте получим текущую точку времени и выведем её в секундах с начала отсчёта часов:
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
auto tp = chrono::steady_clock::now();
auto sec = chrono::duration_cast<chrono::seconds>(tp.time_since_epoch());
cout << "Seconds since epoch: " << sec.count() << endl;
return 0;
}
Результат выполнения кода:
"Seconds since epoch: 1234567"
Пример
Давайте измерим время задержки с помощью sleep_for
и steady_clock:
#include <iostream>
#include <chrono>
#include <thread>
using namespace std;
int main()
{
auto start = chrono::steady_clock::now();
this_thread::sleep_for(chrono::milliseconds(500));
auto end = chrono::steady_clock::now();
auto diff = chrono::duration_cast<chrono::milliseconds>(end - start);
cout << "Slept for: " << diff.count() << " ms" << endl;
return 0;
}
Результат выполнения кода:
"Slept for: 500 ms"
Смотрите также
-
класс
system_clock,
который представляет системные часы реального времени -
метод
now,
который возвращает текущую точку времени -
класс
high_resolution_clock,
который представляет часы с наименьшим доступным периодом тика -
класс
time_point,
который представляет точку во времени