clock() genauer machen?



  • Hallo,

    kann mir einer bitte sagen wie (und ob) man den normalen clock() Timer genauer machen kann? Ich lese da überall was von CLOCKS_PER_SEC, aber weis nicht genau wie ich das jetzt definieren kann, hab mit
    #define CLOCKS_PER_SEC 10000
    geht aber irgendwie nicht. Sorry, bin ein Newbie in Sachen C, brauche einen Timer der genauer ist als Millisecs (ANSI C), hoffe mir kann einer helfen.

    Hier mein kleines TestProg:

    #include <stdio.h>
    #include <time.h>
    
    void main( void )
    {
        clock_t     start;
        clock_t     ende;
        double      differenz;
    
        start = clock();
    
        for (int i=0; i<=500; i++)
        {
            printf( "%s \n", "irgendeinscheiss..." );
        }
        ende = clock();
    
        differenz = (double)(ende - start);
        printf( "Differenz: %10.3f \n", differenz );
    
        // Warten auf irgendeine Eingabe zum beenden
        char ch='a';
        scanf("%s",&ch);
    }
    


  • #define CLOCKS_PER_SEC 1000



  • genauer als clock() geht im Standard nicht - aber du kannst gettimeofday unter Unix und GetTickCount unter Windows verwenden.



  • Da hast Du Pech .... In Standard C gibt's leider keine Möglichkeit, das Verhalten von clock() zu beeinflussen .... CLOCKS_PER_SEC ist bereits in <time.h> definiert. Um die Zeit in Sekunden zurückzubekommen, die das Programm seit seinem Start gelaufen ist, kann man

    clock()/CLOCKS_PER_SEC;
    

    rechnen.



  • Danke. Ich nehme an, in C++ gibts auch keinen genaueren Timer in der Standard Library?



  • richtig



  • Ok, danke an alle für die schnelle Anworten, hätte nicht gedacht dass einem hier so schnell geholfen wird.

    Bye,
    Kostik



  • clock ist generell zur Zeitmessung ungeeignet. Auf Multithreading-fähigen Systemen funktioniert der Spaß nämlich so: Intern wird quasi mit einem Zähler gearbeitet. Dieser Zähler wird inkrementiert, wenn der Prozess genug Prozessorticks gebraucht hat. Es passiert aber leider, dass die interne sogenannte Zeitscheibe sich 'weiterdreht' bevor der Zähler intern erhöht wurde. Das kann das Ergebnis schön nach unten 'korrigieren'. time ist für die Zeitmessung geeigneter. Es gibt (von POSIX abgesehen) in der Norm keinen Grund, warum das nicht genauer auflöst, als es das in Regelfällen tut.

    [Ich will das nicht in jedem clock-Thread schreiben müssen :). Könnte vielleicht ein gut gelaunter Mod eine kleine FAQ (mit anschaulichen Beispielen) dazu basteln?]



  • aus der MSDN:

    Timing measurements were done with the MMSYSTEM function timeGetTime rather than the regular Windows function GetTickCount because timeGetTime returns a millisecond count accurate to the nearest millisecond and GetTickCount returns a millisecond count only accurate to the nearest 55 ms (or one DOS clock tick, hence the name).

    (wurde mal von injune gepostet)

    MfG Lem



  • Original erstellt von Daniel E.:
    [Ich will das nicht in jedem clock-Thread schreiben müssen :). Könnte vielleicht ein gut gelaunter Mod eine kleine FAQ (mit anschaulichen Beispielen) dazu basteln?]

    Aeh... Ich messe immer mit dem asm Befehl rdtsc - dh ich habe im Grunde keine Ahnung von dem was du sagst.

    Aber wenn du den Beitrag nicht selber schreiben willst/kannst - dann gib mir bitte ein paar resourcen wo ich nachlesen kann, und ich schreib ihn.

    Danke!



  • Hmm, ich könnte im Jahre 2003 schon etwas schreiben. Weiteres per Mail, nehme ich an?


Anmelden zum Antworten