Mam eksperymentalną bibliotekę, której wydajność próbuję zmierzyć. Aby to zrobić, pisałem, co następuje:Dlaczego interwały gettimeofday() są czasami ujemne?
struct timeval begin;
gettimeofday(&begin, NULL);
{
// Experiment!
}
struct timeval end;
gettimeofday(&end, NULL);
// Print the time it took!
std::cout << "Time: " << 100000 * (end.tv_sec - begin.tv_sec) + (end.tv_usec - begin.tv_usec) << std::endl;
Czasami moje wyniki obejmują ujemne czasy, z których niektóre są bezsensowne. Na przykład:
Time: 226762
Time: 220222
Time: 210883
Time: -688976
Co się dzieje?
Otrzymujesz negatywy, ponieważ timeval jest strukturą wieloskładnikową. w skrócie składa się z second i useconds. Jeśli naiwnie odmienicie wspólne kompozycje w drugiej telewizji przez pierwszy telewizor, otrzymacie negatywy. na przykład rozważmy tv1 jako 1sec 3usec z epoki, a tv2 to 4sec i 1usec z epoki.jak widać teraz otrzymujesz ujemną wartość różnicy między komponentami usec. –
Masz 4 odpowiedzi na to pytanie, żadna z nich nie była nawet w stanie udzielić poprawnej odpowiedzi, ale wciąż wybrałeś najbardziej nieistotną jako ostateczną odpowiedź. –
Interesujące uzupełnienie, ale istotne tylko przy użyciu tylko jednego z komponentów, tak jak robiłem (tylko przy użyciu komponentów tv_usec, a nie tv_sec). – egpbos