У меня есть экспериментальная библиотека, производительность которой я пытаюсь измерить. Чтобы сделать это, я написал следующее:Почему промежутки времени gettimeofday() иногда отрицательные?
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;
Иногда мои результаты включают в себя отрицательные моменты времени, некоторые из которых являются бессмысленными. Например:
Time: 226762
Time: 220222
Time: 210883
Time: -688976
Что происходит?
вы получаете негативы, потому что timeval является многокомпонентной структурой. вкратце составленный из вторых и useconds. если вы наивно разложите общие составы во 2-м телевизоре на 1-м телевизоре, вы получите негативы. например, считать tv1 как 1сек 3 секунды от эпохи, а tv2 составляет 4 сек и 1 секунда от эпохи.как вы можете видеть, теперь вы получаете отрицательное значение в разнице между компонентами usec. – 2011-01-07 00:06:20
У вас есть 4 ответа на этот вопрос, ни один из них даже не приблизился к правильному ответу, но вы все же выбрали наиболее нерелевантным в качестве окончательного ответа. – 2011-01-07 00:07:24
Интересное дополнение, но актуально только при использовании только одного из компонентов, как я делал (только с использованием компонентов tv_usec, а не с tv_sec). – egpbos