Entre as funções de temporização, time, clock getrusage, clock_gettime, gettimeofdaye timespec_get, eu quero entender claramente como eles são implementados e quais são os seus valores de retorno a fim de saber em que situação eu tenho que usá-los.
Primeiro, precisamos classificar as funções que retornam valores de relógio de parede e comparar as funções que retornam valores de processos ou threads . gettimeofdayretornos valor parede do relógio, clock_gettimeretorna valor relógio de parede ou de processo ou valores de fios dependendo do Clockparâmetro transmitido ao mesmo. getrusagee clockretornar valores do processo.
Em seguida, a segunda pergunta diz respeito à implementação dessas funções e, como conseqüência, à sua precisão. Qual mecanismo de hardware ou software essas funções usam.
Parece que getrusageusa apenas o tick do kernel (geralmente 1ms de comprimento) e, como conseqüência, não pode ser mais preciso que o ms. Está certo? Em seguida, a getimeofdayfunção parece usar o hardware subjacente mais preciso disponível. Como conseqüência, sua precisão é geralmente o microssegundo (não pode ser mais por causa da API) no hardware recente. E clocka página de manual fala sobre "aproximação", o que isso significa? E clock_gettimea API está em nanossegundos? Isso significa que ela pode ser tão precisa se o hardware subjacente permitir? E a monotonicidade?
Existem outras funções?
clock_gettime, portanto, o uso degettimeofday()ser um pouco mais versátil do queclock_gettime()