De N3376 :
20.11.7.1 [time.clock.system]/1:
Objets de la classe system_clock
représente l'heure de l'horloge murale de l'horloge en temps réel du système.
20.11.7.2 [time.clock.steady]/1:
Objets de la classe steady_clock
représentent des horloges pour lesquelles les valeurs de time_point
ne diminuent jamais lorsque le temps physique avance et pour lesquelles les valeurs de time_point
avancer à un rythme régulier par rapport au temps réel. Autrement dit, l'horloge ne peut pas être réglée.
20.11.7.3 [time.clock.hires]/1:
Objets de la classe high_resolution_clock
représentent les horloges dont la période de tic-tac est la plus courte. high_resolution_clock
peut être un synonyme de system_clock
o steady_clock
.
Par exemple, l'horloge du système peut être affectée par quelque chose comme l'heure d'été, auquel cas l'heure réelle indiquée à un moment donné dans le futur peut en fait être une heure dans le passé. (Par exemple, aux États-Unis, à l'automne, le temps recule d'une heure, de sorte que la même heure est vécue "deux fois"), steady_clock
n'est pas autorisé à être affecté par de telles choses.
Une autre façon de penser à la "stabilité" dans ce cas est dans les exigences définies dans le tableau de 20.11.3 [time.clock.req]/2 :
Dans le tableau 59 C1
y C2
désignent les types d'horloge. t1
y t2
sont des valeurs renvoyées par C1::now()
où l'appel retournant t1
se produit avant l'appel retournant t2
et ces deux appels ont lieu avant C1::time_point::max()
. [Note : cela signifie C1
ne s'est pas enroulé entre t1
y t2
. -note finale ]
Expression : C1::is_steady
Les retours : const bool
Sémantique opérationnelle : true
si t1 <= t2
est toujours vrai et le temps entre les ticks de l'horloge est constant, sinon false
.
C'est tout ce que la norme a sur leurs différences.
Si vous voulez faire de l'analyse comparative, votre meilleur choix sera probablement std::high_resolution_clock
car il est probable que votre plate-forme utilise une minuterie à haute résolution (par exemple, la minuterie de l'ordinateur). QueryPerformanceCounter
sur Windows) pour cette horloge. Cependant, si vous effectuez un benchmarking, vous devriez vraiment envisager d'utiliser des horloges spécifiques à la plateforme pour votre benchmark, car les différentes plateformes gèrent cela différemment. Par exemple, certaines plates-formes peuvent vous donner des moyens de déterminer le nombre réel de ticks d'horloge requis par le programme (indépendamment des autres processus exécutés sur le même processeur). Mieux encore, mettez la main sur un vrai profileur et utilisez-le.