Wśród funkcji czasowych, time
, clock
getrusage
, clock_gettime
, gettimeofday
i timespec_get
chcę, aby jasno zrozumieć, w jaki sposób są one realizowane i jakie są ich wartości zwracane w celu poznania, w którym sytuacja muszę ich używać.
Najpierw musimy sklasyfikować funkcje zwracające wartości zegara ściennego względem funkcji zwracających wartości procesów lub wątków . gettimeofday
zwraca wartość zegara ściennego, clock_gettime
zwraca wartość zegara lub wartości procesu lub wątków w zależności od Clock
przekazanego mu parametru. getrusage
i clock
zwracają wartości procesu.
Następnie drugie pytanie dotyczy realizacji tych funkcji, aw konsekwencji ich dokładności. Z jakiego mechanizmu sprzętowego lub programowego korzystają te funkcje.
Wygląda na to, że getrusage
używa tylko tiku jądra (zwykle 1 ms) i w konsekwencji nie może być dokładniejszy niż ms. Czy to jest poprawne? Wtedy getimeofday
funkcja wydaje się używać najdokładniejszego dostępnego sprzętu. W konsekwencji jego dokładność to zwykle mikrosekunda (nie może być większa z powodu API) na najnowszym sprzęcie. A co z tym clock
, że strona podręcznika mówi o "przybliżeniu", co to znaczy? A co z tym clock_gettime
, że API jest w nanosekundach, czy to oznacza, że może być tak dokładne, jeśli pozwala na to podstawowy sprzęt? A co z monotonią?
Czy są jakieś inne funkcje?
clock_gettime
, stąd zastosowaniegettimeofday()
bycia nieco bardziej wszechstronnym niżclock_gettime()