Od N3376:
20.11.7.1 [time.clock.system] / 1:
Obiekty klasy system_clock
reprezentują czas zegara ściennego z ogólnosystemowego zegara czasu rzeczywistego.
20.11.7.2 [time.clock.steady] / 1:
Obiekty klasy steady_clock
reprezentują zegary, dla których wartości time_point
nigdy nie spadają wraz z upływem czasu fizycznego i dla których wartości time_point
postę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_clock
reprezentują zegary o najkrótszym takcie. high_resolution_clock
może być synonimem system_clock
lub 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_clock
takie 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 C1
i C2
oznacz typy zegarów. t1
i t2
są wartościami zwracanymi przez miejsce, w C1::now()
którym powrót wywołania t1
ma miejsce przed powrotem wywołania t2
i oba te wywołania występują wcześniej C1::time_point::max()
. [Uwaga: oznacza to, C1
że nie zawijano między t1
a t2
. —End note]
Wyrażenie: C1::is_steady
Zwraca: const bool
Semantyka operacyjna: true
jeśli t1 <= t2
jest 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 QueryPerformanceCounter
systemie 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.