裁判:linux clock_gettimeClock_gettime納秒計算
我發現效果很好,以獲得處理時間的公式,但有件事情我不明白。 查看下面的結果。
前2行只是顯示forumla在各自的列中。
我只顯示快速運行的3個結果。
有趣的部分是在最後一行,爲什麼是5551 - 999896062
nanoseconds = 18446744072709661105?
爲什麼18446744072709661105+1/1E9
= 0.000109?
我認爲有一些數據轉換會影響結果嗎?
xx: | t1.tv_sec | | t1.tv_nsec | | t2.tv_sec | | t2.tv_nsec
xx: t2-t1(sec) t2-t1(nsec) (t2-t1(sec))+(t2-t1(nsec))/1E9
52291: | 30437 | | 999649886 | | 30437 | | 999759331
52291: 0 109445 0.000109
52292: | 30437 | | 999772970 | | 30437 | | 999882416
52292: 0 109446 0.000109
52293: | 30437 | | 999896062 | | 30438 | | 5551
52293: 1 18446744072709661105 0.000109
源代碼:
int main() {
struct timespec t1, t2;
int i = 0;
while(1) {
clock_gettime(CLOCK_MONOTONIC, &t1);
for(int j=0;j<25000;j++) { };
clock_gettime(CLOCK_MONOTONIC, &t2);
printf("%d: \t | %llu | \t | %lu | \t\t | %llu | \t | %lu \n", i, (unsigned long long) t1.tv_sec, t1.tv_nsec, (unsigned long long) t2.tv_sec, t2.tv_nsec);
printf("%d: \t %llu \t %lu \t\t %lf\n", i, (unsigned long long) t2.tv_sec - t1.tv_sec, t2.tv_nsec - t1.tv_nsec, (t2.tv_sec - t1.tv_sec)+(t2.tv_nsec - t1.tv_nsec)/1E9);
if ((t2.tv_sec - t1.tv_sec) == 1) break;
i++;
}
return 0;
}
你爲什麼不'clock_gettime()'的結果轉換爲納秒的64位數字?讓生活變得如此簡單。 –