Tra le funzioni di temporizzazione, time, clock getrusage, clock_gettime, gettimeofdaye timespec_get, voglio capire chiaramente come la loro applicazione e quali sono i loro valori di ritorno in modo da sapere in quale situazione devo usarli.
Per prima cosa dobbiamo classificare le funzioni che restituiscono i valori dell'orologio da parete rispetto alle funzioni che restituiscono i valori di processo o thread . gettimeofdayrestituisce valore orologio a muro, clock_gettimerestituisce valore orologio a muro o processo o valori filati seconda del Clockparametro passato ad esso. getrusagee clockrestituisce valori di processo.
Quindi la seconda domanda riguarda l'implementazione di queste funzioni e, di conseguenza, la loro accuratezza. Quale meccanismo hardware o software utilizza queste funzioni.
Sembra che getrusageusi solo il tick del kernel (di solito lungo 1ms) e di conseguenza non può essere più preciso del ms. È giusto? Quindi la getimeofdayfunzione sembra utilizzare l'hardware sottostante più accurato disponibile. Di conseguenza la sua precisione è di solito il microsecondo (non può essere più a causa dell'API) sull'hardware recente. Che dire clock, la pagina man parla di "approssimazione", cosa significa? Che dire clock_gettime, l'API è in nanosecondi, significa che è in grado di essere così preciso se l'hardware sottostante lo consente? Che dire della monotonicità?
Ci sono altre funzioni?
clock_gettime, quindi l'uso digettimeofday()essere un po 'più versatile diclock_gettime()