Desde N3376:
20.11.7.1 [time.clock.system] / 1:
Los objetos de clase system_clock
representan la hora del reloj de pared del reloj en tiempo real de todo el sistema.
20.11.7.2 [time.clock.staady] / 1:
Los objetos de clase steady_clock
representan relojes cuyos valores de time_point
nunca disminuyen a medida que avanza el tiempo físico y cuyos valores de time_point
avance a una tasa constante en relación con el tiempo real. Es decir, es posible que el reloj no se ajuste.
20.11.7.3 [time.clock.hires] / 1:
Los objetos de clase high_resolution_clock
representan relojes con el período de tic más corto. high_resolution_clock
puede ser sinónimo de system_clock
o steady_clock
.
Por ejemplo, el reloj de todo el sistema puede verse afectado por algo como el horario de verano, momento en el que la hora real que aparece en algún momento en el futuro puede ser en realidad una hora del pasado. (Por ejemplo, en los EE. UU., En el otoño el tiempo retrocede una hora, por lo que la misma hora se experimenta "dos veces") Sin embargo, steady_clock
no se permite verse afectado por tales cosas.
Otra forma de pensar en "estable" en este caso es en los requisitos definidos en la tabla de 20.11.3 [time.clock.req] / 2:
En la Tabla 59 C1
y C2
denote los tipos de reloj. t1
y t2
son valores devueltos por C1::now()
donde t1
ocurre la devolución de la llamada antes de la devolución de la llamada t2
y ambas llamadas ocurren antes C1::time_point::max()
. [Nota: esto significa que C1
no pasó entre t1
y t2
. —Nota final]
Expresión: C1::is_steady
Devuelve: const bool
Semántica operativa: true
si t1 <= t2
siempre es verdadero y el tiempo entre tics del reloj es constante, en caso contrario false
.
Eso es todo lo que tiene el estándar sobre sus diferencias.
Si desea realizar evaluaciones comparativas, su mejor opción probablemente será std::high_resolution_clock
, porque es probable que su plataforma utilice un temporizador de alta resolución (por ejemplo, QueryPerformanceCounter
en Windows) para este reloj. Sin embargo, si está realizando una evaluación comparativa, debería considerar el uso de temporizadores específicos de la plataforma para su evaluación comparativa, porque las diferentes plataformas manejan esto de manera diferente. Por ejemplo, algunas plataformas pueden brindarle algún medio para determinar el número real de tics de reloj que requiere el programa (independientemente de otros procesos que se ejecutan en la misma CPU). Mejor aún, consigue un generador de perfiles real y úsalo.