Bernhard_K Geschrieben 23. Oktober 2009 Teilen Geschrieben 23. Oktober 2009 Hallo! Mal eine ganz blöde Frage an das auskennende BB: Wie bekomm ich ab gscheitesten eine Zeitmessung in C (unter Linux) hin? Ich hab alles mögliche gefunden aber wie so oft nicht das was ich brauche. Bisher hab ich start = clock(); for(i=0;i { end = clock(); elapsed = ((double) (end - start)) / CLOCKS_PER_SEC; printf("%d) %.5E \n",i,elapsed); } und die time.h verwendet*. Das streikt aber wenns ein bisserl länger dauert. (hab ich schon nachgelesen warum) Wie schauts aus? Kennt da wer was besseres? Auch die echte Zeit anstelle der cputime wäre super! Aber eine Auflösung von ca einer ms brauch ich schon. Danke schon mal! *) Natürlich laufen da sonst sinnvollere Berechnungen in der Schleife Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rowerek Geschrieben 23. Oktober 2009 Teilen Geschrieben 23. Oktober 2009 Schon das hier probiert? http://opengroup.org/onlinepubs/007908799/xsh/clock_gettime.html Da kann man zumindest die Auflösung der Timer abgfragen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bernhard_K Geschrieben 23. Oktober 2009 Autor Teilen Geschrieben 23. Oktober 2009 check zwar noch nicht ganz wie ich das einbau aber werds mal versuchen. Damit kann ich die "normale" uhr auf bessere auflösung umstellen oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rowerek Geschrieben 23. Oktober 2009 Teilen Geschrieben 23. Oktober 2009 So wie ich das verstehe, liefert clock() die vom aktuellen Prozess verbrauchte CPU-Zeit, sollte also nicht zum Messen einer Zeitspanne verwendet werden, selbst wenn dein Prozess die maximale CPU Auslastung verursacht, wird das nicht auf Dauer funktionieren, da ja auch andere Prozesse zum Zug kommen und auch dein Prozess auf I/O Operationen warten kann, die dann nicht dazuzählen. Die Konstante CLOCKS_PER_SEC ist übrigens fix mit 1000000 definiert, und hat mit der aktuellen Auflösung der Werte nicht zu tun. Bei den clock_xxxxxxx Funktionen kannst du mit clock_getres() die echte Auflösung abfragen, und mit clock_gettime(CLOCK_REALTIME, ...) kannst du die aktuelle Systemzeit auslesen. Die Frage ist natürlich, ob diese Funktionen vom Kernel deiner Plattform unterstützt werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Rowerek Geschrieben 23. Oktober 2009 Teilen Geschrieben 23. Oktober 2009 Sag, wozu brauchst du denn das überhaupt? Zeitnehmung für das nächste Rennen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
R.C. Geschrieben 23. Oktober 2009 Teilen Geschrieben 23. Oktober 2009 Mal eine ganz blöde Frage an das auskennende BB: Wie bekomm ich ab gscheitesten eine Zeitmessung in C (unter Linux) hin? In welcher Aufloesung? gettimeofday http://www.opengroup.org/onlinepubs/009695399/functions/gettimeofday.html ist max. auf Mikrosekunden genau (haengt vom jeweiligen System ab, wie genau er aufloest, unter Millisekunden auf jeden Fall). Btw. ist das eine universelle Unix-Loesung, nicht nur fuer Linux geeignet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bernhard_K Geschrieben 27. Oktober 2009 Autor Teilen Geschrieben 27. Oktober 2009 danke schon mal! (Sry, dass ich mich erst jetzt wieder melde aber ich bin halt büro BBler ) Brauch tu ich das eigentlich nur für prognosen weil die leuteln vom großrechner wissen wollen wie lange mein job ca braucht. Nachdem ich aber aus recht schnellen prozessen hochrechne reicht mir die sekunden auflösung die ich bisher zusammengebracht habe nicht aus. clock() hab ich bisher verwendet (dass es nur die cpu-zeit ist wär nicht so tragisch) aber wenn der zeitraum zu lange ist wird der counter wieder auf 0 gesetzt wodurch man neg. zeitdifferenzen bekommt... Werde mal die Varianten von euch versuchen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.