Frage zu times()
-
Hi,
times() gibt ja die Taktzyklen des Prozessors zurück.
Ich habe hier ein Beispielprogramm von einem Prof, wo bei mir leider Blödsinn rauskommt, zumindest interpretiere ich das so. Kann aber selbst keinen Fehler finden.#include <stdio.h> #include <sys/times.h> #include <unistd.h> #include <time.h> int main() { struct tms exec_time; clock_t act_time; long ticks_per_second; long tickduration_in_ms; ticks_per_second = sysconf(_SC_CLK_TCK); tickduration_in_ms = 1000/ticks_per_second; printf("ticks_per_second: %ld\n", ticks_per_second); act_time = times( &exec_time ); printf("actual time (in ms): %ld\n", act_time*tickduration_in_ms); printf("execution time (in ms): %ld\n", (exec_time.tms_utime+exec_time.tms_stime)*tickduration_in_ms); return 0; }
Ausgabe:
ticks_per_second: 100 actual time (in ms): 4315377210 execution time (in ms): 0
Was mich zum einen stutzig macht, sind die niedrigen Ticks pro Sekunde (100), zum anderen habe ich natürlich keine 4315377210 ms gewartet, was gut 50 Tage entspricht!
Interpretiere ich da etwas falsch oder liegt da ein Fehler vor?!
L. G.
Steffo
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Steffo schrieb:
Hi,
times() gibt ja die Taktzyklen des Prozessors zurück.Nein. Es gibt die Schläge eines Uhrwerks zurück, welches vom Prozessor abundan eines weitergezählt wird zurück, während dieser sich um dein Programm kümmert. Denk mal darüber nach, wie der Prozessor wohl beschäftigt wäre, wenn er alle seine Takte zählen würde.
Was mich zum einen stutzig macht, sind die niedrigen Ticks pro Sekunde (100),
Das ist normal, siehe oben. Wenn du hochauflösendere Uhren brauchst, dann musst du andere Funktionen bemühen. Hunderstelsekunden sind für fast alle Ansprüche genug.
zum anderen habe ich natürlich keine 4315377210 ms gewartet, was gut 50 Tage entspricht!
RTFM!
Manpage schrieb:
times() returns the number of clock ticks that have elapsed since an arbitrary point in the past. The return value may overflow the possible range of type clock_t. On error, (clock_t) -1 is returned, and errno is set appropriately.
Du möchtest wohl eher die Differenz zweier Zeiten wissen. Oder eben das was du in der nächsten Zeile ausgibst, was sich auf die Gesamtlaufzeit des aktuellen Prozesses bezieht.
-
RTFM: Hatte ich gemacht, aber irgendwie in der Fülle der Informationen überlesen.
SeppJ schrieb:
Du möchtest wohl eher die Differenz zweier Zeiten wissen. Oder eben das was du in der nächsten Zeile ausgibst, was sich auf die Gesamtlaufzeit des aktuellen Prozesses bezieht.
Das habe ich schon hingekriegt. Mich hat dieses Beispiel vom Prof verwirrt, weil ich eben auch eine Differenz zwischen zwei Zeiten erwartet habe.
-
Steffo schrieb:
RTFM: Hatte ich gemacht, aber irgendwie in der Fülle der Informationen überlesen.
Ahh, dann musst du lernen, mehr Manpages zu lesen. Die sind normalerweise immer gleich aufgebaut. Es gibt immer einen Abschnitt, wo beschrieben wird, was die Funktion überhaupt zurück gibt. Hier das von mir oben zitierte.
-
Schon klar. Ich lese recht viel man pages. Nur habe ich nicht nur eine time-Funktion gelesen, sondern gleich mehrere...