clock()
-
Hallo!
Die Funktion clock() in ctime sollte doch (unabhängig von der Systemauslastung) einen internen Wert pro Sekunde um genau CLOCKS_PER_SEC hochzählen und diesen zurückliefern, oder? D.h. wenn man die Funktion 2 Mal im Abstand von einer Sekunde aufruft, dann sollte der Unterschied genau CLOCKS_PER_SEC sein.
Ich habe zum Testen folgendes Programm geschrieben, das einfach immer wieder clock() ausgibt:
#include <iostream> #include <ctime> int main(){ std::cout << "Clocks per second: " << CLOCKS_PER_SEC << std::endl; long i = 0; while (i++ < 10000000) std::cout << clock() << std::endl; return 0; }Unter Windows funktioniert das Programm perfekt: CLOCKS_PER_SEC ist 1000 und es zählt pro Sekunde um genau diesen Wert hoch.
Unter Linux ist CLOCKS_PER_SEC=1.000.000, clock() zählt pro Sekunde aber um nur etwa 50.000 hoch.
Besonders deutlich sieht man das Problem unter MacOS X: Dort ist CLOCKS_PER_SEC=100, das Programm braucht aber ca. 4 Sekunden um den Wert um 100 zu erhöhen.
Das Verhalten ist für mich nicht erklärbar, weil das ja sicher im Standard festgelegt ist.
Macht die Funktion etwa nicht das, das ich erwarte? Laut meinem C++-Buch und einem Tutorial verwende ich die Funktion aber richtig.
Danke!
mfg
-
Das Verhalten ist für mich nicht erklärbar, weil das ja sicher im Standard festgelegt ist.
Im Standard findet sich die Funktion clock(), der Datentyp clock_t und bei Standard Macro CLOCKS_PER_SEC.
Deine Frage ist dort nicht geregelt.
-
Naja, wenn das Verhalten von clock() und CLOCKS_PER_SEC festgelegt ist, dann müsste das ja eigentlich auch schon reichen um das erwartete Verhalten zu garantieren.