Linux下clock_gettime函數詳解
要包含這頭文件<time.h>
且在編譯鏈接時需加上 -lrt ;因為在librt中實現了clock_gettime函數。
---
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,ts);
printf("%d %d",ts.tv_sec, ts.tv_nsec);打印出來的時間跟 cat /proc/uptime第一個參數一樣
/proc/uptime里面的兩個數字分別表示:
the uptime of the system (seconds), and the amount of time spent inidle process (seconds).
把第一個數讀出來,那就是從系統啟動至今的時間,單位是秒
Middleware對POSIX提供的標准計時器API進行封裝,主要提供了兩種類型的時鍾的封裝。一種是CLOCK_REALTIME,另一種是CLOCK_MONOTONIC。對與man手冊的解釋是:
CLOCK_REALTIME: Systemwide realtime clock. 系統范圍內的實時時鍾。
CLOCK_MONOTONIC:Represents monotonic time. Cannot be set.表示單調時間,不能被設置的。
手冊中解釋的比較籠統。我個人的理解是:
CLOCK_REALTIME:這種類型的時鍾可以反映wall clocktime,用的是絕對時間,當系統的時鍾源被改變,或者系統管理員重置了系統時間之后,這種類型的時鍾可以
得到相應的調整,也就是說,系統時間影響這種類型的timer。
CLOCK_MONOTONIC:用的是相對時間,他的時間是通過jiffies值來計算的。該時鍾不受系統時鍾源的影響,只受jiffies值的影響。
建議使用:
CLOCK_MONOTONIC這種時鍾更加穩定,不受系統時鍾的影響。如果想反映wall clocktime,就使用CLOCK_REALTIME。