std::chrono::time_point
Материал из cppreference.com
<tbody>
</tbody>
| Определено в заголовочном файле <chrono>
|
||
template< class Clock, class Duration = typename Clock::duration > class time_point; |
(начиная с C++11) | |
Шаблонный класс std::chrono::time_point представляет момент во времени. Реализован так, как если бы он хранил значение типа Duration, указывающее временной интервал от начала эпохи Clock.
|
|
(до C++23) |
Типы-элементы
| Тип элемент | Определение |
clock
|
Clock, часы, которыми измеряется этот момент времени
|
duration
|
Duration, тип std::chrono::duration используемый для измерения времени, прошедшего с начала эпохи
|
rep
|
Rep, арифметический тип, представляющий количество тиков длительности
|
period
|
Period, тип std::ratio, представляющий период длительности в тиках
|
Функции-элементы
| конструирует новый момент времени (public функция-элемент) | |
| возвращает момент времени как длительность с момента старта его часов (public функция-элемент) | |
| изменяет момент времени на указанную длительность (public функция-элемент) | |
| увеличивает или уменьшает длительность (public функция-элемент) | |
[static] |
возвращает момент времени, соответствующий наименьшей длительности (public static функция-элемент) |
[static] |
возвращает момент времени, соответствующий наибольшей длительности (public static функция-элемент) |
Функции, не являющиеся элементами
(C++11) |
выполняет операции сложения и вычитания, связанные с моментом времени (шаблон функции) |
(C++11)(C++11)(удалено в C++20)(C++11)(C++11)(C++11)(C++11)(C++20) |
сравнивает два момента времени (шаблон функции) |
(C++11) |
преобразует момент времени в другой момент времени на тех же часах с другой длительностью (шаблон функции) |
| преобразует time_point в другой, округляя в меньшую сторону (шаблон функции) | |
| преобразует time_point в другой, округляя в большую сторону (шаблон функции) | |
| преобразует time_point в другой, округляя до ближайшего, или до чётного в промежуточных случаях (шаблон функции) |
Вспомогательные классы
| специализация свойства std::common_type (специализация шаблона класса) | |
| поддержка хэширования для std::chrono::time_point (специализация шаблона класса) |
Пример
Запустить этот код
#include <algorithm>
#include <chrono>
#include <ctime>
#include <iomanip>
#include <iostream>
void slow_motion()
{
static int a[] {1,2,3,4,5,6,7,8,9,10,11,12};
// Генерирует Γ(13) == 12! перестановок:
while (std::ranges::next_permutation(a).found) { }
}
int main()
{
using namespace std::literals; // позволяет буквальные суффиксы, например
// 24h, 1ms, 1s.
const std::chrono::time_point<std::chrono::system_clock> now =
std::chrono::system_clock::now();
const std::time_t t_c = std::chrono::system_clock::to_time_t(now - 24h);
std::cout << "24 часа назад время было "
<< std::put_time(std::localtime(&t_c), "%F %T.\n") << std::flush;
const std::chrono::time_point<std::chrono::steady_clock> start =
std::chrono::steady_clock::now();
std::cout << "Разные часы несопоставимы: \n"
<< " Системное время: " << now.time_since_epoch() << "\n"
<< " Стабильное время: " << start.time_since_epoch() << "\n";
slow_motion();
const auto end = std::chrono::steady_clock::now();
std::cout
<< "Медленные расчёты заняли "
<< std::chrono::duration_cast<std::chrono::microseconds>(end - start).count()
<< "мкс ≈ "
<< (end - start) / 1ms << "мс ≈ " // почти эквивалентная форма, приведённого выше,
<< (end - start) / 1s << "с.\n"; // но с использованием миллисекунд и секунд
// соответственно
}
Возможный вывод:
24 часа назад время было 2021-02-15 18:28:52.
Разные часы несопоставимы:
Системное время: 1666497022681282572нс
Стабильное время: 413668317434475нс
Медленные расчёты заняли 2090448мкс ≈ 2090мс ≈ 2с.
Смотрите также
(C++11) |
временной интервал (шаблон класса) |
(C++20) |
представляет конкретный год, месяц и день (класс) |