由於已經有一段時間了(例如,見old question,以及當你谷歌的時候彈出的bug報告),clock_gettime()似乎不會單調地報告返回時間。爲了排除任何愚蠢的錯誤,我可能會監督,這裏是有關的代碼(摘自較大的程序):clock_gettime()仍然不單調 - 替代方案?
<include time.h>
long nano_1, nano_2;
double delta;
struct timespec tspec, *tspec_ptr;
clock_gettime(CLOCK_MONOTONIC_RAW, tspec_ptr);
nano_1 = tspec.tv_nsec;
sort_selection(sorted_ptr, n);
clock_gettime(CLOCK_MONOTONIC_RAW, tspec_ptr);
nano_2 = tspec.tv_nsec;
delta = (nano_2 - nano_1)/1000000.0;
printf("\nSelection sort took %g micro seconds.\n", (double) delta);
排序小數組(約1000元)報告可信倍。當我使用3種排序算法對較大的排序(10,000+)進行排序時,3中的1-2排除負排序時間。我嘗試了手冊頁中提到的所有時鐘類型,不僅CLOCK_MONOTONIC_RAW - 沒有變化。
(1)我在代碼中忽略了什麼?
(2)clock_gettime()是否可以替代clock_gettime()來以比秒更準確的增量度量時間?我不需要nanonseconds,但是秒數太難以真正幫助。
系統:
- Ubuntu 12.04。
- 內核3.2.0-30
- gcc 4.6.3。
- libc的版本2.15
- 與-lrt
有多大,當它發生的增量?在背景中是否有什麼會使時鐘「運行正常」(如果它知道振盪器比網絡時間稍微快一點,它可以從現在開始減少一小部分時間,然後再調整...) 。如果ms精度足夠了,你可以使用clock()嗎? – Floris
@弗洛里斯:我看到了通常在負數百微秒的負面結果。除了通常的內核進程之外,在後臺沒有什麼應該進行的;在任何情況下,我都會等待結果而不啓動任何其他程序,並且不要認爲我安裝了任何可能會用計時器弄亂的軟件。如果知道安裝特定軟件的bug clock_gettime()出來,知道哪些可能會有所幫助......雖然我懷疑它,因爲除了gtk之外,我不會安裝其他許多軟件。 – gnometorule
http:// stackoverflow上的一些有趣信息。com/questions/12392278/measure-time-in-linux-getrusage -with-clock-gettime-vs-clock-vs-gettimeofday - 你看到了嗎? – Floris