我需要計算Linux(Ubuntu 14)上的時間差(以毫秒爲單位)。如何獲得獨立於系統時間的時間差異(毫秒)?
它需要獨立於系統時間,因爲應用程序可能會在執行期間更改它(它會根據從GPS接收的數據設置系統時間)。
我檢查了clock函數,它不適用於我們,因爲它返回程序消耗的處理器時間,我們需要實時。
sysinfo(如在此question中所述)會在啓動後返回秒數,並且我們還需要幾毫秒。
根據我們的測試(考慮到我們需要毫秒,並且此函數被重複調用),從/ proc/uptime(在此question中提到)讀取似乎很慢。
我們可以使用C++ 11,但我認爲std :: chrono也與系統時間有關(如果我錯了,請糾正我)。
有沒有其他的方法來完成這個?
我們的性能測試(用於的/ proc /運行時間比較),重複調用100萬:
gettimeofday的:
(不是我們需要的,因爲它依賴於系統時間)
#include <sys/time.h>
unsigned int GetMs(){
unsigned int ret = 0;
timeval ts;
gettimeofday(&ts,0);
static long long inici = 0;
if (inici==0){
inici = ts.tv_sec;
}
ts.tv_sec -= inici;
ret = (ts.tv_sec*1000 + (ts.tv_usec/1000));
return ret;
}
時鐘:
(無效,返回應用程序使用的蜱,非實時)
#include <time.h>
unsigned int GetMs(){
unsigned int ret = 0;
clock_t t;
t = clock();
ret = t/1000;
return ret;
}
正常運行時間:
#include <fstream>
unsigned int GetMs(){
unsigned int ret = 0;
double uptime_seconds;
if (std::ifstream("/proc/uptime", std::ios::in) >> uptime_seconds) {
ret = (int) (1000 * uptime_seconds);
}
}
結果:
- gettimeofday的:31毫秒
- 時鐘:153毫秒
- 正常運行時間:6005毫秒
感謝您的回答。它完美地工作,並不依賴於系統時鐘,這符合我的要求。然而,根據我的測試,我接受@ zwol的答案是更快。在我的嵌入式設備上,有1000000次重複調用,std :: chrono :: steady_clock花了3523 ms,clock_gettime和CLOCK_MONOTONIC花了2184 ms。 –
@PauGuillamon沒問題。樂意效勞。 – NathanOliver