更新:在代碼固定的增量計算,仍是問題仍然奇怪的結果,同時測量增量時間在Linux上
夥計們,請你解釋一下爲什麼我使用正從時間非常奇怪的結果,以時間的下面的代碼:
#include <unistd.h>
#include <sys/time.h>
#include <stdio.h>
int main()
{
struct timeval start, end;
long mtime1, mtime2, diff;
while(1)
{
gettimeofday(&start, NULL);
usleep(2000);
gettimeofday(&end, NULL);
mtime1 = (start.tv_sec * 1000 + start.tv_usec/1000.0);
mtime2 = (end.tv_sec * 1000 + end.tv_usec/1000.0);
diff = mtime2 - mtime1;
if(diff > 10)
printf("WTF: %ld\n", diff);
}
return 0;
}
(你可以編譯和運行它:的gcc -o test.c的出-lrt & & ./out)
什麼我遇到了幾乎是每秒或DIFF變量的零星大值,甚至更多的時候,e.g:
$ gcc test.c -o out -lrt && ./out
WTF: 14
WTF: 11
WTF: 11
WTF: 11
WTF: 14
WTF: 13
WTF: 13
WTF: 11
WTF: 16
這怎麼可能呢?責怪操作系統?它是否做了太多的上下文切換?但我的箱子空閒( 平均負載:0.02,0.02,0.3)。
這裏是我的Linux內核版本:
$ uname -a
Linux kurluka 2.6.31-21-generiC#59-Ubuntu SMP Wed Mar 24 07:28:56 UTC 2010 i686 GNU/Linux
不管它是什麼,它不會發生在我的電腦上:/(Linux 2.6.33-gentoo#2 SMP x86_64) – 2010-05-21 13:11:29
確定嗎?嘗試將「if(diff> 10)」行更改爲「if(diff> 3)」 – pachanga 2010-05-21 13:51:29