2009-03-01 61 views
3

事實上,我正在計算一個函數在我的程序中完成的時間。 所以我使用邏輯來獲得系統時間,當我調用函數和時間,當函數返回一個值,然後減去我花費時間完成的值。 所以,如果有人能告訴我一些更好的方法,或只是如何在一個實例獲得系統時間,將是相當大的幫助如何在C++中獲取系統時間?

+0

[用C最佳定時的方法?(http://stackoverflow.com/questions/459691/best-timing-method-in-c)的可能重複 – 2012-07-23 01:33:58

+0

2009-03-01 05:49:02

回答

3

您的問題完全取決於您正在使用的WHICH系統。每個系統都有自己的功能來獲取當前時間。爲了查明系統運行了多久,您需要訪問「高分辨率性能計數器」之一。如果您不使用性能計數器,則通常限於微秒精度(或更差),這在分析函數的速度時幾乎是無用的。

在Windows中,您可以通過'QueryPerformanceCounter()'函數訪問計數器。這將返回每個處理器上不同的任意數字。要找出計數器中有多少個滴答聲,請調用'QueryPerformanceFrequency()'。

如果你在windows以外的平臺下編碼,只需要谷歌性能計數器和你正在編碼的系統,它應該告訴你如何訪問計數器。

編輯(澄清)
這是C++,只包括WINDOWS.H並導入 「KERNEL32.LIB」(似乎已經打消了我的超鏈接,請在文檔:http://msdn.microsoft.com/en-us/library/ms644904.aspx)。對於C#,您可以使用「System.Diagnostics.PerformanceCounter」類。

5

定時我的代碼時,我使用的方法是時間( )功能。它會向您返回一個數字值,代表epoch,這使得減法部分更易於計算。

相關代碼:

#include <time.h> 
#include <iostream> 

int main (int argc, char *argv[]) { 

int startTime, endTime, totalTime; 

startTime = time(NULL); 

/* relevant code to benchmark in here */ 

endTime = time(NULL); 

totalTime = endTime - startTime; 

std::cout << "Runtime: " << totalTime << " seconds."; 

return 0; 
} 

請記住,這是用戶的時間。對於CPU,時間見Ben的回覆。

0

在Linux下,嘗試使用gettimeofday()進行微秒分辨率,或使用clock_gettime()進行納秒分辨率。

(當然實際的時鐘可有粗糙的分辨率。)

0

在某些系統,您不必訪問time.h中頭部。因此,您可以使用下面的代碼片段來找出程序運行需要多長時間,精確度爲秒。

void function() 
{ 
time_t currentTime; 
time(&currentTime); 
int startTime = currentTime; 

    /* Your program starts from here */ 


    time(&currentTime); 
    int timeElapsed = currentTime - startTime; 

    cout<<"It took "<<timeElapsed<<" seconds to run the program"<<endl; 



}