2016-05-17 53 views
0

我試圖使用使用clock() linux下的測量用C執行時間如下:測量執行時間與時鐘秒用C不工作

#include <time.h> 
#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char const* argv[]) 
{ 
    clock_t begin, end; 
    begin = clock(); 
    sleep(2); 
    end = clock(); 
    double spent = ((double)(end-begin))/CLOCKS_PER_SEC; 
    printf("%ld %ld, spent: %f\n", begin, end, spent); 
    return 0; 
} 

輸出是:

1254 1296, spent: 0.000042 

文檔中說,將時鐘時間除以CLOCKS_PER_SEC以獲得以秒爲單位的執行時間,但對於2秒sleep,這似乎相當不正確。

有什麼問題?

+1

'%f'爲'double',僅供參考。 –

+0

@SouravGhosh是的,就像變量time_spent一樣。 –

+0

@SouravGhosh,C可變功能會自動進行一定的促銷活動。其中之一是從浮動到雙倍。使用%f作爲浮點數並不是最優的,但它也不完全是錯誤的。對於%d的打印字符也是如此。 –

回答

2

睡覺幾乎不需要執行時間。該計劃只需要安排喚醒,然後自己睡覺。當它睡着了,它沒有執行。當它醒來時,它不需要做任何事情。這一切都需要很短的時間。

它不需要更多的執行時間來睡更長的時間。因此,程序未執行時有2秒的時間段沒有效果。

+0

好的,謝謝,我該如何測量睡眠時間?事實上,這正是我需要的。 –

+0

@NicolasScottoDiPerto您可以使用'clock_gettime'和'CLOCK_MONOLITHIC'來獲取當前時間;這會像你期望的那樣工作(記住它是POSIX的東西;如果你需要可移植性,在Windows上你可以使用'GetTickCount'或'QueryPerformanceCounter')。 – szczurcio

1

clock測量CPU時間(至少在Linux中)。休眠進程不消耗CPU時間。

如果您想用秒錶測量時間間隔,無論您的過程在做什麼,請使用clock_gettimeCLOCK_MONOTONIC

+0

謝謝你,這是我最初需要的。 –

0

man clock()了答案:

The clock() function returns an approximation of processor time used by the program.

其中明確告訴clock()返回程序所使用的處理器時間,不是您想要的程序的總運行時間這是使用gettimeofday典型的做法。