std::chrono::duration
| Definido en el archivo de encabezado <chrono>
|
||
template< class Rep, class Period = std::ratio<1> > class duration; |
(desde C++11) | |
La plantilla de clase std::chrono::duration representa un intervalo de tiempo.
Consiste en una cuenta de tics de tipo Rep y un período de tic, donde el período de tic es una fracción racional en tiempo de compilación que representa el tiempo en segundos de un tic al siguiente.
Los únicos datos almacenados en duration es una cuenta de tics de tipo Rep. Si {{tt|Rep} } es de punto flotante, entonces duration puede representar fracciones de tics. Period se incluye como parte del tipo de duración y solo se usa al realizar conversiones entre diferentes duraciones.
Tipos miembro
| Tipo miembro | Definición |
rep
|
Rep, un tipo aritmético que representa el número de tics.
|
period
|
Period (hasta C++17)typename Period::type (desde C++17), un std::ratio que representa el período de tic (es decir, el número de fracciones de segundo por tic)
|
Funciones miembro
| Construye una nueva duración. (función miembro pública) | |
| Asigna el contenido. (función miembro pública) | |
| Devuelve la cuenta de tics. (función miembro pública) | |
[estático] |
Devuelve el valor de duración especial zero. (función miembro estática pública) |
[estático] |
Devuelve el valor de duración especial min. (función miembro estática pública) |
[estático] |
Devuelve el valor de duración especial max. (función miembro estática pública) |
| Implementa + unario y - unario. (función miembro pública) | |
| Incrementa o decrementa la cuenta de tics. (función miembro pública) | |
| Implementa asignación compuesta entre dos duraciones. (función miembro pública) |
Funciones no miembro
| Implementa operaciones aritméticas con duraciones como argumentos. (plantilla de función) | |
(C++11)(C++11)(eliminado en C++20)(C++11)(C++11)(C++11)(C++11)(C++20) |
Compara dos duraciones. (plantilla de función) |
(C++11) |
Convierte una duración a otra, con un intervalo de tic diferente. (plantilla de función) |
(C++17) |
Convierte una duración a otra, redondeando hacia abajo. (plantilla de función) |
(C++17) |
Convierte una duración a otra, redondeando hacia arriba. (plantilla de función) |
(C++17) |
Convierte una duración a otra, redondeando al más cercano, se empata con par. (plantilla de función) |
(C++17) |
Obtiene el valor absoluto de la duración. (plantilla de función) |
(C++20) |
Emite salida en un flujo sobre un objeto de tipo duration. (plantilla de función) |
(C++20) |
Analiza un objeto de tipo duración a partir de un flujo de acuerdo con el formato proporcionado. (plantilla de función) |
Tipos auxiliares
| Tipo | Definición |
| std::chrono::nanoseconds | duration</*tipo entero con signo de al menos 64 bits*/, std::nano>
|
| std::chrono::microseconds | duration</*tipo entero con signo de al menos 55 bits*/, std::micro>
|
| std::chrono::milliseconds | duration</*tipo entero con signo de al menos 45 bits*/, std::milli>
|
| std::chrono::seconds | duration</*tipo entero con signo de al menos 35 bits*/>
|
| std::chrono::minutes | duration</*tipo entero con signo de al menos 29 bits*/, std::ratio<60>>
|
| std::chrono::hours | duration</*tipo entero con signo de al menos 23 bits*/, std::ratio<3600>>
|
| std::chrono::days (desde C++20) | duration</*tipo entero con signo de al menos 25 bits*/, std::ratio<86400>>
|
| std::chrono::weeks (desde C++20) | duration</*tipo entero con signo de al menos 22 bits*/, std::ratio<604800>>
|
| std::chrono::months (desde C++20) | duration</*tipo entero con signo de al menos 20 bits*/, std::ratio<2629746>>
|
| std::chrono::years (desde C++20) | duration</*tipo entero con signo de al menos 17 bits*/, std::ratio<31556952>>
|
Nota: cada uno de los tipos de duración predefinidos hasta hours cubre un rango de al menos ±292 años.
|
Cada uno de los tipos de duración predefinidos |
(desde C++20) |
Clases auxiliares
| Especializa el rasgo std::common_type. (especialización de plantilla de clase) | |
(C++11) |
Indica que una duración es convertible a una duración con un período de tic diferente. (plantilla de clase) |
(C++11) |
Construye valores cero, mínimo y máximo de una cuenta de tics de un tipo dado. (plantilla de clase) |
Especialización de std::formatter que da formato a un objeto de tipo duration según el formato proporcionado. (especialización de plantilla de clase) |
Literales
Definido en el espacio de nombres
std::literals::chrono_literals | |
(C++14) |
Un literal std::chrono::duration que representa horas. (función) |
(C++14) |
Un literal std::chrono::duration que representa minutos. (función) |
(C++14) |
Un literal std::chrono::duration que representa segundos. (función) |
(C++14) |
Un literal std::chrono::duration que representa milisegundos. (función) |
(C++14) |
Un literal std::chrono::duration que representa microsegundos. (función) |
(C++14) |
Un literal std::chrono::duration que representa nanosegundos. (función) |
|
Nota: los sufijos de literal |
(desde C++20) |
| Macro de Prueba de característica |
|---|
__cpp_lib_chrono_udls
|
(para literales definidos por el usuario).
Notas
El intervalo de tiempo real (en segundos) que tiene un objeto de duración d es aproximadamente igual a d.count() * D::period::num / D::period ::den, donde D es de tipo chrono::duration<> y d es un objeto de ese tipo.
Ejemplo
Este ejemplo muestra cómo definir varios tipos de duración personalizados y convertir entre tipos:
#include <iostream>
#include <chrono>
using namespace std::chrono_literals;
template<typename T1, typename T2>
using mul = std::ratio_multiply<T1, T2>;
int main()
{
using sacudidas = std::chrono::duration<int, mul<std::deca, std::nano>>;
using momentitos = std::chrono::duration<int, std::centi>;
using microquincenas = std::chrono::duration<float,
mul<mul<std::ratio<2>, std::chrono::weeks::period>, std::micro>>;
using nanosiglos = std::chrono::duration<float,
mul<mul<std::hecto, std::chrono::years::period>, std::nano>>;
using fps_24 = std::chrono::duration<double, std::ratio<1,24>>;
std::cout << "1 segundo es:\n";
// conversión de escala entera sin pérdida de precisión: sin conversión
std::cout << std::chrono::microseconds(1s).count() << " microsegundos\n"
<< sacudidas(1s).count() << " sacudidas\n"
<< momentitos(1s).count() << " momentitos\n";
// conversión de escala entera con pérdida de precisión: requiere conversión
std::cout << std::chrono::duration_cast<std::chrono::minutes>(1s).count()
<< " minutos\n";
// conversión de escala de punto flotante: sin conversión
std::cout << microquincenas(1s).count() << " microquincenas\n"
<< nanosiglos(1s).count() << " nanosiglos\n"
<< fps_24(1s).count() << " fotogramas a 24fps\n";
}
Salida:
1 segundo es:
1000000 microsegundos
100000000 sacudidas
100 momentitos
0 minutos
0.82672 microquincenas
0.316887 nanosiglos
24 fotogramas a 24fps