Dieser wird vor dem Rechnen gemacht, der zweite danach. Aber wissen Sie, wie man es subtrahiert?
Ich brauche das Ergebnis in Millisekunden
gettimeofday sollte eigentlich nicht verwendet werden, um die verstrichene Zeit zu messen. Verwenden clock_gettime(CLOCK_MONOTONIC) stattdessen. Hier ist der Grund
– Daniel Kamil Kozar
1. Oktober 2013 um 7:26 Uhr
Was ist ‘ld’ in der printf-Anweisung? und auch warum in irgendeinem Programm ===> printf(“time = %06lu\n”, now.tv_usec); wird genutzt? Was ist 06 in den Anführungszeichen?
@Beginner …… %ld ist ein Formatbezeichner: für lange Dezimalzahlen und %06lu ist ein Formatbezeichner: für lange ohne Vorzeichen mit 6 führenden Nullen … Sie können sich hier über printf-Formatbezeichner informieren: cplusplus.com/reference/cstdio/printf
Dies setzt voraus, dass Sie mit Intervallen arbeiten, die kürzer als ~2000 Sekunden sind. An diesem Punkt kann die Arithmetik je nach verwendeten Typen überlaufen. Wenn Sie mit längeren Intervallen arbeiten müssen, ändern Sie einfach die letzte Zeile in:
long long elapsed = (t1.tv_sec-t0.tv_sec)*1000000LL + t1.tv_usec-t0.tv_usec;
funktioniert nicht, ich brauche Millisekunden und es sagt Segmentierungsfehler
– Wegpunkt
19. März 2011 um 15:01 Uhr
Der Segmentierungsfehler hat nichts mit diesem Code zu tun. Es passiert woanders.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
19. März 2011 um 15:07 Uhr
Ich erhalte nur bei Verwendung dieses Codes einen Segmentierungsfehler, trotzdem zählt er nicht in Millisekunden
– Wegpunkt
19. März 2011 um 15:09 Uhr
Es zählt Mikrosekunden. Teilen Sie durch 1000, wenn Sie Millisekunden benötigen, aber Millisekunden gelten im Allgemeinen als sehr, sehr schlechte Zeitauflösung. Wenn Sie einen Segmentierungsfehler erhalten, müssen Sie Ihren Code anzeigen oder einen Debugger verwenden, um selbst herauszufinden, wo es passiert, aber aufgrund des von mir vorgeschlagenen Codes kann dies definitiv nicht passieren.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
19. März 2011 um 15:59 Uhr
@Xofo: Welcher nicht initialisierte Speicher? Ja, gtod ist veraltet, aber die Leute verwenden es immer noch aus vernünftigen Gründen. Verwenden clock_gettime und teilen Sie durch 1000, wenn Sie es vorziehen.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
27. Mai 2016 um 16:04 Uhr
Wenn Sie die Code-Effizienz oder auf andere Weise die Zeit messen möchten IntervalleFolgendes wird einfacher:
#include <time.h>
int main()
{
clock_t start = clock();
//... do work here
clock_t end = clock();
double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;
return 0;
}
hth
Dies misst die CPU-Zeit, nicht Echtzeit, und hat oft eine sehr schlechte Auflösung.
– R.. GitHub HÖR AUF, EIS ZU HELFEN
19. März 2011 um 14:19 Uhr
Dies ist gut, wenn Sie die CPU-Effizienz messen möchten. Wenn Sie etwas anderes messen – beispielsweise eine E/A-Operation – ist es möglicherweise besser, gettimeofday() zu verwenden.
– Brian L
19. März 2011 um 14:20 Uhr
Ich frage mich nur, ob er versucht, Benchmark-Tests durchzuführen. Gibt es dafür nicht irgendwo eine C-lib? Aber natürlich bist du in Ordnung. Ich stimme zu, weil ich auch lerne. Bitte Leute, lasst die Überschriften nicht weg. Es ist alles in den Bibliotheken, die wir verwenden, richtig?
– Douglas G. Allen
28. Mai 2015 um 20:35 Uhr
Die Antwort von @Daniel Kamil Kozar ist die richtige Antwort – gettimeofday sollte eigentlich nicht verwendet werden, um die verstrichene Zeit zu messen. Verwenden Sie stattdessen clock_gettime(CLOCK_MONOTONIC).
Man Pages sagen – Die von gettimeofday() zurückgegebene Zeit wird durch diskontinuierliche Sprünge in der Systemzeit beeinflusst (z. B. wenn der Systemadministrator die Systemzeit manuell ändert). Wenn Sie eine monoton ansteigende Uhr benötigen, siehe clock_gettime(2).
Die Opengroup sagt – Anwendungen sollten die Funktion clock_gettime() anstelle der veralteten Funktion gettimeofday() verwenden.
Jeder scheint gettimeofday zu lieben, bis er auf einen Fall stößt, wo es nicht funktioniert oder nicht da ist (VxWorks) … clock_gettime ist fantastisch genial und portabel.
Das verursacht überall Bugs. Bitte keine weiteren Bugs hinzufügen.
Dein curtime Die Variable enthält die Anzahl der Sekunden seit der Epoche. Wenn Sie einen davor und einen danach erhalten, ist der spätere minus der frühere die verstrichene Zeit in Sekunden. Sie können abziehen time_t Werte einfach gut.
13835100cookie-checkC – gettimeofday für Rechenzeit?yes
gettimeofday
sollte eigentlich nicht verwendet werden, um die verstrichene Zeit zu messen. Verwendenclock_gettime(CLOCK_MONOTONIC)
stattdessen. Hier ist der Grund– Daniel Kamil Kozar
1. Oktober 2013 um 7:26 Uhr
Was ist ‘ld’ in der printf-Anweisung? und auch warum in irgendeinem Programm ===> printf(“time = %06lu\n”, now.tv_usec); wird genutzt? Was ist 06 in den Anführungszeichen?
– Anfänger
6. Dezember 2013 um 6:48 Uhr
Eine sehr schöne Seite mit einigen guten Referenzen und manchmal Beispielen, aber es gibt auch andere wie zum Beispiel Wikibooks. techonthenet.com/c_language/standard_library_functions/time_h/…
– Douglas G. Allen
28. Mai 2015 um 15:14 Uhr
@Beginner …… %ld ist ein Formatbezeichner: für lange Dezimalzahlen und %06lu ist ein Formatbezeichner: für lange ohne Vorzeichen mit 6 führenden Nullen … Sie können sich hier über printf-Formatbezeichner informieren: cplusplus.com/reference/cstdio/printf
– NeoH4x0r
15. September 2015 um 14:23 Uhr