2011-05-06 43 views
5
#import <stdio.h> 
#import <time.h> 

int main (void) { 

    printf("Clock ticks per second: %d\n", CLOCKS_PER_SEC); 
    double check = clock(); 
    int timex = time(NULL); 

    for (int x = 0; x <= 500000; x++) { 

     printf("."); 

    } 
    puts("\n"); 

    printf("Total Time by Clock: %7.7f\n", (clock() - check)/CLOCKS_PER_SEC); 
    printf("Total Time by Time: %d\n", time(NULL) - timex); 

    getchar(); 
} 

當我執行上面的代碼中,我得到這樣的結果:壞的結果:時間(NULL)和時鐘()

總時間由時鐘:0.0108240

總時間由時間:12

我希望clock()代表一個儘可能接近時間的數字。

上面介紹的總時間是在macbook上完成的,但是,我的筆記本電腦上的代碼工作得很好(windows)。

CLOCKS_PER_SECOND宏在PC上返回1000,在MAC上返回1,000,000。

回答

8

窗口上的時鐘()返回掛鐘時間。 * nixes上的clock()會返回程序花費的CPU時間,但這並不會很多,您在此處執行I/O時可能會被阻止。

+0

謝謝你。是否有任何工作全面的mac我可以做到實現掛鐘時間嚴格爲C,只使用標準庫的使用時間? – Crosility 2011-05-06 13:01:43

+0

使用例如gettimeofday() – nos 2011-05-06 13:31:05

+0

或更現代的'clock_gettime',它可以提供高達納秒的分辨率。 – 2011-05-06 13:50:27

0

time()返回time_t。當您將其分配給int時,可能會丟失信息。如果您始終使用time_t,會發生什麼情況?

int main(void) { 
    time_t timex = time(0); 
    /* ... */ 
    printf("%d", (int)(time(0) - timex)); 
} 
+2

使用difftime來計算'time_t'的差異。 – 2011-05-06 09:57:27

+0

我沒有使用時間(0),只有時鐘()的問題。但感謝您的幫助。時間(0)似乎正在工作 - 從指定日期起以秒爲單位返回時間。 – Crosility 2011-05-06 13:03:44

1

printf()的安慰,使系統調用每個functon電話,花了擋在控制檯重繪時間等沒有爲處理時間計算。

在那裏進行一些繁重的計算。

for (long int x = 0; x <= 5000000000; x++) { 
    sqrt(2.9999); 
} 
+0

你是說時鐘()只計算進程本身的活動用法?不跟蹤,例如:從應用程序開始到一點之間的時間戳? – Crosility 2011-05-06 13:00:13

+0

它取決於實現。一些UNIX實現和等待的子進程計算CPU時間一樣多,其他只是調用進程CPU時間。無論如何,如果你的進程試圖調用printf(),並且因爲xterm輸入管道已滿而被阻塞 - 這個阻塞時間絕對不會被計入clock()...在所有系統上,除了Windows:clock()返回wall-時鐘時間,而不是CPU使用率。通常,儘可能避免使用clock():有更好的定義的調用,如times()和getrusage()。 – blaze 2011-05-10 09:07:45

+0

感謝Blaze,在發佈了一個應用之後,我意識到clock()和NSTimer並不像調用實際時間那樣高效。 :) 謝謝您的幫助。 – Crosility 2011-08-02 18:08:37