clock() zu ungenau??...Was ist hier faul??



  • Hi,

    ich wollte in einem kleinen C-Win32-Konsolenprogramm wissen, wie lange es braucht, bis ein Server antwortet...also hab ich die Funktion clock() von time.h bemüht...etwa so:

    clock_t start, end;
    ...
    start = clock();
    ...clientaufruf...
    end = clock();
    printf("\n\nStartzeit: %d Endzeit: %d CLK_TCK: %d Elapsed time: %Lf Sekunden\n", startzeit, endzeit, CLOCKS_PER_SEC, (double) (endzeit-startzeit)/ CLOCKS_PER_SEC );
    **********************************
    Die Ausgabe ist dann meistens z.b.: Startzeit: 401 EndZeit: 401 CLK: 1000 ElapsedTime: 0.000000

    ===> mach ich da irgendwas falsch??...Weil eigentlich sollte doch clock() die Anzahl der CPU-Ticks liefern...das sollte doch eigentlich nie den selben Wert liefern??...Gibts irgendnen andren Weg rauszukriegen, wielange etwas GANZ GENAU dauert??
    Anmerkung1:..wenn ich anstatt CLK_TCK, TICK_PER_SECONDS nehm kommt das gleiche raus...
    Anmerkung2:..um Fehler durch falsch formatierte printfs auszuschliessen, hab ich das auch debugged....der Debugger zeigt die selben Werte wie mein printf...

    BESTEN DANK FUER JEDE ANTWORT!!!!



  • Ja, clock() ist oft sehr ungenau (nicht dass falsche Werte kommen, aber hat eben zu wenig "ticks per second").
    Timer mit hoher Auflösung gibts aber leider keinen Standardisierten. Unter Windows kann man z.B. QueryPerformanceCounter verwenden, andere Plattformen werden u.U. andere ähnliche Funktionen anbieten.

    Mit QueryPerformanceCounter unter Windows hast du auf den meisten Systemen eine Auflösung von ~3.5MHz.



  • Sicher, dass clock überhaupt die Funktion ist, die du willst? clock liefert nur die Zeit, die der Prozess verbraucht hat, nicht die Zeit, die seit irgend einem Zeitpunkt vergangen ist. Wenn dein Prozess also während des Aufrufs an den Server die CPU entzogen bekommt (was bei einem blockierenden Systemaufruf praktisch sicher ist), dann wird die Messung nicht nur leicht verfälscht...


Log in to reply