2009-03-01 31 views
3

Tatsächlich versuche ich die Zeit zu berechnen, die eine Funktion in meinem Programm benötigt. So verwende ich die Logik, um Systemzeit zu erhalten, wenn ich die Funktion und Zeit aufrufen, wenn die Funktion einen Wert zurückgibt, indem ich die Werte subtrahiere, die ich Zeit bis zum Abschluss erhielt. Also, wenn jemand kann mir etwas besseren Ansatz erzählen oder einfach nur, wie Systemzeit, zu einer Instanz zu bekommen, es wäre eine ganz HilfeWie bekomme ich Systemzeit in C++?

+0

möglich Duplikat [Beste Timing-Methode in C?] (Http://stackoverflow.com/questions/459691/best-timing-method-in-c) –

+0

Antwort

3

Ihre Frage hängt völlig davon ab, welches System Sie verwenden. Jedes System hat seine eigenen Funktionen, um die aktuelle Zeit zu erhalten. Um herauszufinden, wie lange das System läuft, sollten Sie auf einen der "High Resolution Performance Counters" zugreifen. Wenn Sie keinen Leistungsindikator verwenden, sind Sie normalerweise auf eine Genauigkeit im Mikrosekundenbereich (oder schlechter) beschränkt, die für die Profilerstellung der Geschwindigkeit einer Funktion nahezu nutzlos ist.

In Windows können Sie den Zähler über die ‚Queryperformancecounter()‘ Funktion zugreifen. Dies gibt eine beliebige Zahl zurück, die auf jedem Prozessor unterschiedlich ist. Um herauszufinden, wie viele Ticks im Counter == 1 Sekunde sind, rufen Sie 'QueryPerformanceFrequency()' auf.

Wenn Sie unter einer anderen Plattform als Windows codieren, googlen Sie einfach den Leistungsindikator und das System, unter dem Sie programmieren, und es sollte Ihnen sagen, wie Sie auf den Zähler zugreifen können.

Edit (Klärung)
Dies ist C++, nur windows.h umfassen und importieren Sie die "Kernel32.lib" (scheint mein Hyperlink entfernt zu haben, in der Dokumentation überprüfen unter: http://msdn.microsoft.com/en-us/library/ms644904.aspx). Für C# können Sie die Klasse "System.Diagnostics.PerformanceCounter" verwenden.

+0

ist dies für C# oder es funktioniert für C++ auch wenn ja welche Bibliothek (Header-Datei) – Mobin

5

Der Ansatz, den ich verwenden, wenn mein Code Timing ist die Zeit () Funktion. Sie gibt einen einzelnen numerischen Wert an Sie zurück, der epoch darstellt, wodurch der Subtraktionsteil für die Berechnung einfacher wird.

Relevante Code:

#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; 
} 

Denken Sie daran, dies ist benutzer Zeit. Für CPU, Zeit siehe Bens Antwort.

0

Versuchen Sie unter Linux gettimeofday() für Mikrosekundenauflösung oder clock_gettime() für Nanosekundenauflösung.

(Natürlich ist die tatsächliche Uhr kann eine gröbere Auflösung.)

0

In einigen System, das Sie keinen Zugriff auf den time.h Header haben. Daher können Sie das folgende Code-Snippet verwenden, um herauszufinden, wie lange es dauert, bis Ihr Programm ausgeführt wird, und zwar mit der Genauigkeit von Sekunden.

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; 



}