<ctime> und std::clock Problem
-
Da sich ei meinem Programm der Wert von std::clock() nicht geändert habe, habe ich versucht das ganze Problem zu lösen.
Scheinbar gibt clock() nicht
http://c-plusplus.com schrieb:
The clock() function returns the processor time since the program started, or -1 if that information is unavailable. To convert the return value to seconds, divide it by CLOCKS_PER_SEC. (Note: if your compiler is POSIX compliant, then CLOCKS_PER_SEC is always defined as 1000000.)
zurück, sondern nur die Zeit, die Mein Programm gelaufen ist.
(Der Wert erhöht sich ganz normal wenn ich das usleep(20); aus dem Code nehme)
Ist das Verhalten normal? Überhaupt zulässig?
$ g++ --version g++ (GCC) 4.1.2 (Ubuntu 4.1.2-0ubuntu4) Copyright (C) 2006 Free Software Foundation, Inc. Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE ZWECKE.Oder liegt da ein Compilerproblem vor?
Testcode
$ cat main.cpp #include <iostream> #include <ctime> int main() { while (1) { static std::clock_t start(std::clock()); std::clock_t actual(std::clock()); std::cout << start << " " << actual << " " << actual - start << std::endl; usleep(20);//Auskommentieren zum test } }
-
Öhm, clock() soll die Zeit zurück liefern, seitdem das Programm gestartet wurde. Und nach dem was du da schreibst, tut es das auch. Wo ist denn das Problem?
-
darthdespotism schrieb:
Scheinbar gibt clock() nicht
http://c-plusplus.com schrieb:
The clock() function returns the processor time since the program started, or -1 if that information is unavailable. To convert the return value to seconds, divide it by CLOCKS_PER_SEC. (Note: if your compiler is POSIX compliant, then CLOCKS_PER_SEC is always defined as 1000000.)
Google-Überstzer ist dein Freund:
Die Uhr () Funktion liefert den Prozessor Zeit, da das Programm gestartet wurde, oder -1, wenn diese Information nicht verfügbar ist. Für die Konvertierung der Rückgabewert auf Sekunden, teilen sie durch CLOCKS_PER_SEC. (Hinweis: Wenn Sie Ihre Compiler POSIX-kompatibel ist, dann ist immer CLOCKS_PER_SEC definiert als 1000000.)
lol, ich liebe solche Übersetzungen.
-
Vielleicht hab ich das nicht klar genug ausgedrück.
Ich hatte von clock() erwartet, die Zeit zu liefern, seit das Programm gestartet wurde und nicht, was aktuell der Fall ist, die Zeit, die das Programm gelaufen ist (und nicht geschlafen hat)
-
Unter Windows mit ::Sleep(...) funktioniert das einwandfrei. Setze ich zB ::Sleep(500) ein wird wird
500 1000 1500 2000 usw.ausgegeben.
-
Ja, genau das hätte ich erwartet, bekomme aber nur
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
clock() liefert afaik nur die Zeit, in der das Programm auch selbst den Prozessor hatte - und bei usleep() gibt es den Prozessor ab.