Was ist der beste Weg, um einen Zeitunterschied in C ++ zu berechnen? Ich stelle die Ausführungsgeschwindigkeit eines Programms ein, daher interessieren mich Millisekunden. Besser noch, Sekunden. Millisekunden.
Die akzeptierte Antwort funktioniert, muss jedoch ctime oder time.h enthalten, wie in den Kommentaren angegeben.
Antworten:
Siehe
std::clock()
Funktion.Wenn Sie die Ausführungszeit für sich selbst berechnen möchten (nicht für den Benutzer), ist es besser, dies in Taktstrichen (nicht in Sekunden) zu tun.
BEARBEITEN:
verantwortliche Header-Dateien -
<ctime>
oder<time.h>
quelle
clock()
Gibt die vom Programm verbrauchte CPU-Zeit zurück. Wenn das Programm also parallel ausgeführt wird, ist die von der Funktion zurückgegebene Zeit die Summe derWenn Sie C ++ 11 verwenden, finden Sie hier einen einfachen Wrapper (siehe diese Zusammenfassung ):
Oder für c ++ 03 auf * nix:
Anwendungsbeispiel:
quelle
Timer()
und dem Aufruf aufelapsed()
if ändert!std::chrono::high_resolution_clock::is_steady
- was unter Linux der Fall ist!Ich würde ernsthaft über die Verwendung von Boost nachdenken, insbesondere boost :: posix_time :: ptime und boost :: posix_time :: time_duration (unter http://www.boost.org/doc/libs/1_38_0/doc/html/date_time/posix_time) .html ).
Es ist plattformübergreifend, einfach zu bedienen und bietet meiner Erfahrung nach die höchste Zeitauflösung, die ein Betriebssystem bietet. Möglicherweise auch sehr wichtig; Es bietet einige sehr nette E / A-Operatoren.
Um damit den Unterschied in der Programmausführung zu berechnen (in Mikrosekunden; wahrscheinlich Overkill), würde es ungefähr so aussehen [Browser geschrieben, nicht getestet]:
quelle
Ich habe diese Antwort hinzugefügt, um zu verdeutlichen, dass die akzeptierte Antwort die CPU-Zeit anzeigt, die möglicherweise nicht die gewünschte Zeit ist. Denn laut Referenz gibt es CPU-Zeit und Wanduhrzeit . Die Wanduhrzeit ist die Zeit, die die tatsächlich verstrichene Zeit unabhängig von anderen Bedingungen wie der von anderen Prozessen gemeinsam genutzten CPU anzeigt. Zum Beispiel habe ich mehrere Prozessoren verwendet, um eine bestimmte Aufgabe zu erledigen, und die CPU-Zeit betrug 18 Sekunden, wobei die tatsächliche Wanduhrzeit tatsächlich 2 Sekunden dauerte .
Um die tatsächliche Zeit zu erhalten, die Sie tun,
quelle
Boost 1.46.0 und höher enthält die Chrono- Bibliothek:
quelle
std::chrono
Namespace mit fast demselben Inhalt.In Windows: Verwenden Sie GetTickCount
quelle
Sie können auch die clock_gettime verwenden . Diese Methode kann verwendet werden, um zu messen:
Der Code lautet wie folgt:
`
quelle
Nur für den Fall, dass Sie unter Unix arbeiten, können
time
Sie die Ausführungszeit abrufen:quelle
Nur eine Randnotiz: Wenn Sie unter Windows arbeiten und wirklich Präzision benötigen, können Sie QueryPerformanceCounter verwenden . Es gibt Ihnen Zeit in (möglicherweise) Nanosekunden .
quelle
Für mich ist der einfachste Weg:
Mit diesem Code müssen Sie nicht den Klassiker machen
end - start
.Genießen Sie Ihren Lieblingsansatz.
quelle
Ermitteln Sie die Systemzeit am Anfang und am Ende in Millisekunden und subtrahieren Sie sie.
Um die Anzahl der Millisekunden seit 1970 in POSIX zu ermitteln, schreiben Sie:
Um die Anzahl der Millisekunden seit 1601 unter Windows zu ermitteln, schreiben Sie:
Wenn Sie die Windows-Antwort so normalisieren möchten, dass sie auch die Anzahl der Millisekunden seit 1970 zurückgibt, müssen Sie Ihre Antwort um 11644473600000 Millisekunden anpassen. Dies ist jedoch nicht erforderlich, wenn Sie sich nur um die verstrichene Zeit kümmern.
quelle
Wenn Sie verwenden:
Dann benötigen Sie Folgendes, um die Zeit in Sekunden zu ermitteln:
quelle
Dies scheint für Intel Mac 10.7 gut zu funktionieren:
quelle