Zeit messen



  • vielleicht interressiert dich ja das hier auch noch:

    http://www.flipcode.com/cgi-bin/fcarticles.cgi?show=4&id=63830
    dort wird eine Methode beschrieben wie man exakt die Ticks mit hilfe eines speziellen CPU counters bestimmen kann.

    Hab ich selber mal hier im Forum gefunden. sehr empfehlenswert. Aber an x86 gebunden da ASM instructionen benutzt werden.



  • Hi Leute,

    kann ich die Funktion clock_gettime auch unter Windows XP benutzen?

    Ich bekomme nämlich mit dem Dev-Cpp Compiler folgende Fehler:

    17 [Warning] extra tokens at end of #include directive
    52 aggregate timespec tp' has incomplete type and cannot be defined 106CLOCK_REALTIME' undeclared (first use this function)
    106 `clock_gettime' undeclared (first use this function)

    Aber nach den vorhergehenden Beispielen müsste es ja funktionieren...

    Und wie mache ich das? (Nur für den Fall... (Bin Newbie))

    clock_gettime ist in librt. Also -lrt benutzen.

    Danke an alle,
    HdZ



  • Zeig bitte mal Deine #include<foobar.h>-Zeile; das sieht verheißungsvoll aus: "17 [Warning] extra tokens at end of #include directive". Passt gut zu den restlichen Fehlern.



  • hdz schrieb:

    Hi Leute,

    kann ich die Funktion clock_gettime auch unter Windows XP benutzen?

    Wenn Windows den POSIX Standard und da die Realtime Extensions unterstützt, dann ja. Aber ich glaube nicht, dass Windows das kann.



  • Zeig bitte mal Deine #include<foobar.h>-Zeile;

    Sorry, keine foobar.h
    Brauch ich die? In den Beispielen war davon nie die Rede. Er sagt auch dass es die Datei net gibt.

    Wenn Windows den POSIX Standard und da die Realtime Extensions unterstützt, dann ja. Aber ich glaube nicht, dass Windows das kann.

    Also bringt das hier eh nichts?

    Danke,
    HdZ



  • Oder meinst du meine #includes überhaupt?
    Die wären

    #include <iostream>
    #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    #include <stdlib.h>
    //#include <sys/time.h>
    #include <ctime>;
    


  • foobar.h war nur ein Platzhalter.
    Irgendwas passt laut Compiler mit dem #include in Zeile 17 nicht. Welches ist das denn?

    edit: Aber ob das unter Windows generell funktionieren kann oder nicht, weiß ich nicht. Soll ich Dich in ein geeignetes Forum verschieben?



  • Ne, die Zeile 17 ist schwer in Ordnug... 😉
    Das war irgendwie vom Compiler ein Fehler, er sagte nämlich in gewisser Weise:

    In Datei C:\Programme\....\ping.cpp**:7** | 17 [Warning] extra tokens at end of #include directive

    Hab jetzt aber was gefunden:
    time.h: timeGetTime()

    Gibt die Zeit seit dem Start von Windows zurück. (in ms)

    Und nochwas rausgefunden: clock_gettime gibts unter windows nicht, die <ctime> ist unter Linux und Windoof einfach anders...

    Danke euch allen...
    HdZ



  • HdZ schrieb:

    Und nochwas rausgefunden: clock_gettime gibts unter windows nicht, die <ctime> ist unter Linux und Windoof einfach anders...

    Naja, clock_gettime ist aus der SuS IIRC und Windows ist größtenteils weder POSIX- noch SuS-kompatibel. 😉



  • Die clock_gettime sollte in standard c library sein, ist sie aber nicht !
    Dafür aber in librt 🙂

    man muss beim linken die -lrt dazulinken.
    mfg.

    einheitlix schrieb:

    Jaah... sowas habe ich mir vorgestellt 🙂

    Aber... *seufz*... meint ihr, es würde einmal was auf Anhieb klappen? Jetzt will er gar nicht mehr kompilieren 😞

    #include <ctime>
    #include <iostream> 
    using namespace std; 
    
    int main() { 
    
      struct timespec tp; 
      // time at begin and end 
      double begin, end; 
    
      clock_gettime(CLOCK_REALTIME, &tp);
      begin = 1e9*tp.tv_sec + tp.tv_nsec; 
    
      for( long i = 0; i < 12345678; i++);
    
      clock_gettime(CLOCK_REALTIME, &tp);
      end = 1e9*tp.tv_sec + tp.tv_nsec; 
      cout << "Time: " << (end-begin) << " nanoseconds (" << (end-begin)*1e-9 << " seconds)" << endl; 
    
    }
    

    Ausgabe beim kompilieren:

    [21:45:21][~/dev/c++/damen]
    malte@fuchur $ g++ test.cpp
    /tmp/ccwqSts8.o(.text+0x1f): In function `main':
    : undefined reference to `clock_gettime'
    /tmp/ccwqSts8.o(.text+0x5e): In function `main':
    : undefined reference to `clock_gettime'
    collect2: ld returned 1 exit status
    

    Was ist jetzt falsch? Egal, ob ich nun <ctime> oder <time.h> include, derselbe Fehler kommt. Und das, obwohl in der /usr/include/time.h dick und fett steht:

    /* Get current value of clock CLOCK_ID and store it in TP.  */
    extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;
    

    Zu Hülf! 😞
    (sorry, wenn ich mich blöd anstelle... fang halt gerade erstmal an)



  • ich hab ein problem
    ich will die zeit zu beginn und am ende einer funktion messen
    und dann die differenz bilden

    function function()
    {
    zeitmessen();

    }

    2. mal zeitmessen2();

    zeitdifferenz=zeitmessen2-zeitmessen;

    http://www.c-plusplus.net/forum/images/smiles/smile.gif
    🙂



  • Wo ist nun dein Problem und warum erweckst du dafür einen 1 1/2 Jahre alten Thread zum leben?





  • mein problem ist dass ich eine funktion brauch die mir die zeit misst



  • anarchist schrieb:

    mein problem ist dass ich eine funktion brauch die mir die zeit misst

    Dann lies dir den Thread doch mal durch, den du erweckt hast ...


Log in to reply