Von N3376:
20.11.7.1 [time.clock.system] / 1:
Klassenobjekte system_clockrepräsentieren die Wanduhrzeit von der systemweiten Echtzeituhr.
20.11.7.2 [time.clock.steady] / 1:
Klassenobjekte steady_clockstellen Uhren dar, für die die Werte von time_pointniemals mit fortschreitender physikalischer Zeit abnehmen und für die Werte von time_pointfortschreitender Geschwindigkeit relativ zur Echtzeit. Das heißt, die Uhr kann möglicherweise nicht eingestellt werden.
20.11.7.3 [time.clock.hires] / 1:
Klassenobjekte high_resolution_clockrepräsentieren Uhren mit der kürzesten Tick-Periode. high_resolution_clockkann ein Synonym für system_clockoder sein steady_clock.
Beispielsweise kann die systemweite Uhr von einer Sommerzeit beeinflusst werden. Zu diesem Zeitpunkt kann die zu einem späteren Zeitpunkt angegebene tatsächliche Zeit tatsächlich eine Zeit in der Vergangenheit sein. (ZB in den USA bewegt sich die Herbstzeit um eine Stunde zurück, so dass dieselbe Stunde "zweimal" erlebt wird.) Es steady_clockist jedoch nicht gestattet, von solchen Dingen betroffen zu sein.
Eine andere Art, in diesem Fall über "stetig" nachzudenken, sind die Anforderungen, die in der Tabelle vom 20.11.3 [time.clock.req] / 2 definiert sind:
In Tabelle 59 C1und C2bezeichnen Uhrentypen. t1und t2sind Werte, die zurückgegeben werden, C1::now()wenn die Rückgabe des Anrufs t1vor der Rückgabe des Anrufs erfolgt t2und diese beiden Anrufe zuvor erfolgen C1::time_point::max(). [Hinweis: Dies bedeutet, C1dass nicht zwischen t1und umbrochen wurde t2. - Endnote]
Ausdruck: C1::is_steady
Rückgabe: const bool
Operative Semantik: trueWenn dies t1 <= t2immer der Fall ist und die Zeit zwischen den Ticks der Uhr konstant ist, ist dies ansonsten konstant false.
Das ist alles, was der Standard über ihre Unterschiede hat.
Wenn Sie Benchmarking durchführen möchten, ist dies wahrscheinlich die beste Wahl std::high_resolution_clock, da Ihre Plattform wahrscheinlich einen hochauflösenden Timer (z. B. QueryPerformanceCounterunter Windows) für diese Uhr verwendet. Wenn Sie jedoch ein Benchmarking durchführen, sollten Sie wirklich in Betracht ziehen, plattformspezifische Timer für Ihren Benchmark zu verwenden, da verschiedene Plattformen dies unterschiedlich handhaben. Auf einigen Plattformen können Sie beispielsweise die tatsächliche Anzahl der für das Programm erforderlichen Takt-Ticks ermitteln (unabhängig von anderen Prozessen, die auf derselben CPU ausgeführt werden). Besser noch, besorgen Sie sich einen echten Profiler und nutzen Sie diesen.