2016-02-02 65 views
1

我試圖找出我寫的C程序的用戶時間(在Linux機器上)。目前我在代碼的開頭調用gettimeofday()一次,最後調用一次。我使用timeval結構和difftime(stop.tv_sec,start.tv_sec)來獲得經過的秒數。這會返回整秒,如「1.000000」。但是,我的項目要求我的程序在幾秒鐘內以微秒精度定時,例如「1.234567」。我怎樣才能找到這個值?我知道gettimeofday()也會在.tv_usec中記錄微秒,但我不確定如何使用此值並正確格式化。Ç - 我的計時方案秒,微秒級精度上

+0

根本就不能忽視'tv_usec'-結構成員,但其中包括在計算? – Ctx

+0

如果您真的獲得該分辨率,這是特定於操作系統的。 – Olaf

回答

0

使用timersub功能。它有三個參數:第一個是初始時間,第二個是最後一個,第三個是結果(差異)。所有這三個參數都是指向timeval結構的指針。

0

嘗試把初始時間入庫然後減去從最後的時候,你就完成了。

storedValue = timer.tv_sec + 0.000001 * timer.tv_usec 
timer.tv_sec + 0.000001 * timer.tv_usec - storedValue 
0

如果你想微秒:

long long usec; 

usec = tv.tv_sec; 
usec *= 1000000; 
usec += tv.tv_usec; 

如果你想分數秒[浮點]:

double asec; 

asec = tv.tv_usec; 
asec /= 1e6; 
asec += tv.tv_sec; 

下面是一些功能齊全:

// tvsec -- get current time in absolute microseconds 
long long 
tvsec(void) 
{ 
    struct timeval tv; 
    long long usec; 

    gettimeofday(&tv,NULL); 

    usec = tv.tv_sec; 
    usec *= 1000000; 
    usec += tv.tv_usec; 

    return usec; 
} 

// tvsecf -- get current time in fractional seconds 
double 
tvsecf(void) 
{ 
    struct timeval tv; 
    double asec; 

    gettimeofday(&tv,NULL); 

    asec = tv.tv_usec; 
    asec /= 1e6; 
    asec += tv.tv_sec; 

    return asec; 
} 

注意:如果你想要更高的精度(例如,納秒),你可以使用clock_gettime(CLOCK_REALTIME,...)和應用類似的轉換