Od N3376:
20.11.7.1 [time.clock.system] / 1:
Obiekty klasy system_clockreprezentują czas zegara ściennego z ogólnosystemowego zegara czasu rzeczywistego.
20.11.7.2 [time.clock.steady] / 1:
Obiekty klasy steady_clockreprezentują zegary, dla których wartości time_pointnigdy nie spadają wraz z upływem czasu fizycznego i dla których wartości time_pointpostępu w stałym tempie w stosunku do czasu rzeczywistego. Oznacza to, że zegar nie może być regulowany.
20.11.7.3 [time.clock.hires] / 1:
Obiekty klasy high_resolution_clockreprezentują zegary o najkrótszym takcie. high_resolution_clockmoże być synonimem system_clocklub steady_clock.
Na przykład na zegar systemowy może mieć wpływ coś w rodzaju czasu letniego, w którym to momencie rzeczywisty czas podany w pewnym momencie w przyszłości może w rzeczywistości należeć do przeszłości. (Np. W USA jesienią czas cofa się o godzinę, więc ta sama godzina jest przeżywana „dwa razy”). Jednak steady_clocktakie rzeczy nie mają na to wpływu.
Innym sposobem myślenia o „stabilnym” w tym przypadku są wymagania określone w tabeli 20.11.3 [time.clock.req] / 2:
W tabeli 59 C1i C2oznacz typy zegarów. t1i t2są wartościami zwracanymi przez miejsce, w C1::now()którym powrót wywołania t1ma miejsce przed powrotem wywołania t2i oba te wywołania występują wcześniej C1::time_point::max(). [Uwaga: oznacza to, C1że nie zawijano między t1a t2. —End note]
Wyrażenie: C1::is_steady
Zwraca: const bool
Semantyka operacyjna: truejeśli t1 <= t2jest zawsze prawdziwe, a czas między tyknięciami zegara jest stały, w przeciwnym razie false.
To wszystko, co standard ma na temat ich różnic.
Jeśli chcesz przeprowadzić test porównawczy, prawdopodobnie najlepszym rozwiązaniem będzie std::high_resolution_clock, ponieważ jest prawdopodobne, że Twoja platforma używa zegara o wysokiej rozdzielczości (np. W QueryPerformanceCountersystemie Windows) dla tego zegara. Jeśli jednak przeprowadzasz testy porównawcze, naprawdę powinieneś rozważyć użycie timerów specyficznych dla platformy do swojego testu porównawczego, ponieważ różne platformy radzą sobie z tym inaczej. Na przykład niektóre platformy mogą zapewniać pewne sposoby określania rzeczywistej liczby taktów zegara wymaganych przez program (niezależnie od innych procesów uruchomionych na tym samym procesorze). Jeszcze lepiej, zdobądź prawdziwy profiler i użyj go.