Ich versuche zu verwenden Zeit() um verschiedene Punkte meines Programms zu messen.
Was ich nicht verstehe, ist, warum die Werte vorher und nachher gleich sind? Mir ist klar, dass dies nicht der beste Weg ist, um ein Profil meines Programms zu erstellen, ich möchte nur sehen, wie lange etwas dauert.
printf("**MyProgram::before time= %ld\n", time(NULL));
doSomthing();
doSomthingLong();
printf("**MyProgram::after time= %ld\n", time(NULL));
Ich habe es versucht:
struct timeval diff, startTV, endTV;
gettimeofday(&startTV, NULL);
doSomething();
doSomethingLong();
gettimeofday(&endTV, NULL);
timersub(&endTV, &startTV, &diff);
printf("**time taken = %ld %ld\n", diff.tv_sec, diff.tv_usec);
Wie lese ich ein Ergebnis von **time taken = 0 26339
? Bedeutet das 26.339 Nanosekunden = 26,3 msec?
Was ist mit **time taken = 4 45025
Bedeutet das 4 Sekunden und 25 msec?
10 Stimmen
Ich verstehe die Frage nicht. Natürlich sind die Werte unterschiedlich. Dazwischen ist Zeit vergangen, also
time()
gibt einen anderen Wert zurück.1 Stimmen
Was meinen Sie mit "Ich verstehe nicht, warum die Werte im Vorher und Nachher unterschiedlich sind"? Sie erhalten die aktuelle Zeit (in Sekunden seit dem 1. Januar 1970) mit
time(NULL)
... das zweite Mal, wenn Sie es aufrufen, wird N Sekunden nach dem ersten und damit ... anders sein (es sei denn, was auch immer es ist Sie tun, dauert nicht eine Sekunde zu beenden ... in diesem Fall, es wird das gleiche wie das erste sein).1 Stimmen
Können Sie uns sagen, was gedruckt wird und wie lange es dauert, wenn Sie es mit einer Stoppuhr oder einer Wanduhr (oder einem Kalender) messen?
5 Stimmen
Entschuldigung, ich meine, dass beide Werte gleich sind. Ich habe meine Frage falsch geschrieben.
2 Stimmen
Siehe dieses Thema: stackoverflow.com/questions/275004/
0 Stimmen
@hap497 cool, aber was druckt es (und wie lange dauert es, wenn man es von Hand macht)?
0 Stimmen
Haben Sie schon einmal Folgendes gelesen open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm
0 Stimmen
Möchten Sie messen Wanduhr Zeit (Zeitpunkt des Prozessendes - Zeitpunkt des Prozessbeginns), oder wollen Sie messen verbrauchte CPU-Zeit ? (Die Wanduhrzeit kann ein Bruchteil der CPU-Zeit bei Multithreading sein, und die CPU-Zeit kann ein Bruchteil der Wanduhrzeit sein, wenn Ihr Prozess auf E/A wartet.) Hierfür müssen Sie verschiedene Funktionen verwenden. Für letzteres ist es am einfachsten, Ihren Prozess unter der Kontrolle der
time
(keine Änderung des Quellcodes erforderlich); dadurch erhalten Sie auch die Zeit, die der Kernel für die Verarbeitung der E/A des Prozesses benötigt.0 Stimmen
Sie erleben vielleicht die Microsoft Minute .
0 Stimmen
Wenn einfach ist das Wichtigste: $
time ./MyProgram
(nur Linux). Referenz: levelup.gitconnected.com/ .0 Stimmen
time(NULL)
hat ein Ergebnis in Sekunden. Wenn das Programm weniger als eine Sekunde dauert, sind Start- und Endzeit gleich lang. Das Ergebnis von timersub ist eine Struktur mit ganzzahligen Sekunden und ganzzahligen Mikrosekunden (siehe man7.org/linux/man-pages/man2/settimeofday.2.html ) Man könnte es also ausdrucken mitprintf("**time taken = %ld.%06ld\n", diff.tv_sec, diff.tv_usec);
0 Stimmen
Beachten Sie, dass
tv_usec
ist Mikrosekunden nicht Nanosekunden. Dieu
wird oft anstelle von (Kleinbuchstabe mu) verwendet, da es in ASCII (nicht erweitert) nicht verfügbar ist, daher "usec" anstelle von "s".