Zeitmessen unter C



  • Hi, hoffe das ich jetzt hier richtig bin. Habe meine ganzen Aufgaben erledigt und woran es gerade scheitert ist das ich die Zeit messen will zwischen 2 stellen.

    float a,b,c;
      	 a=gettimeofday(2);
    
    	erzeugen_einer_Datei();
    
    	beschreiben_ohne_Sync();
    	b=gettimeofday(2);
    	c=a-b;
    	printf("%f /n", c);
    

    Das sollte mir doch eigentlich die Differenz ausgegeben. Ich kriege aber immer Werte unter 1 raus?! Kann mir da mal jemand sagen was daran falshc ist, bin sicher ist wieder eine sonne kleine Sache an der es gerade scheitert 😉
    Gruss



  • kann es sein, dass du gettimeofday falsch aufrufst? du musst dem doch 2 pointer auf structs mitgeben und float als rückgabewert kann irgendwie auch nicht stimmen.
    🙂



  • Wenn du halbwegs genau die Zeit messen willst, dann nimm am besten QueryPerformanceCounter. Zum Beispiel so:

    //Klassenmember
      LARGE_INTEGER		  m_liFrequency;
      LARGE_INTEGER		  m_liEnd;
      LARGE_INTEGER		  m_liStart;
    
    //Methoden
    void CMyDlg::MeasureHPTimeStart() {
      if (!QueryPerformanceFrequency(&m_liFrequency)){
        //error
      }
      if (!QueryPerformanceCounter(&m_liStart)){
        //error
      }
    }
    
    void CMyDlg::MeasureHPTimeEnd() {
      if (!QueryPerformanceCounter(&m_liEnd)){
        //error
      }else{
        int dwPerfElapsed;
        dwPerfElapsed=(int)(((m_liEnd.QuadPart - m_liStart.QuadPart) * 1000) / m_liFrequency.QuadPart);
        char s[128];
        sprintf_s(s,"%ims",dwPerfElapsed);
        m_ctlStaticSnapshotDuration.SetWindowText(s);
      }
    }
    

    EDIT: Upps, das ist ja gar nicht das WinAPI-Forum...



  • Hi,
    richtig heissts:

    #include <sys/time.h>
    int gettimeofday(struct timeval *zeit, void *tzp);
    

    Wahrswcheinlich impliziert dein COmpiler einen reinterpret_cast daraus (Siehe IEE Darstellung von floating pointer integern).

    mfg, Hans



  • _matze schrieb:

    Wenn du halbwegs genau die Zeit messen willst, dann nimm am besten QueryPerformanceCounter.
    ...
    Upps, das ist ja gar nicht das WinAPI-Forum...

    wenn du halbwegs genau die zeit messen willst dann nimm RDTSC
    upps, das ist ja gar nicht das x86-forum

    Golem86 schrieb:

    Wahrswcheinlich impliziert dein COmpiler einen reinterpret_cast daraus

    wie? einen was? nö, also sowas macht der bestimmt nicht.
    🙂



  • rdtsc ist zwar die eizig wahre Zeitmessfunktion
    (ist auch ganz leicht in inline-asm zu implementieren), aber ich glaube, dass er eher die Zeit in ms und nicht in Clockcycles messen will 🙂 (BTW: Geht das überhaupt auf anderen Architekturen, z.B. PPC?)

    Also mit reinterpret_cast meine ich letztendlich die inkorrekte Umwandlung von int zu float (wegen Überlauf). Ein Teil des ints könnte in nicht für den Wert vorgesehene Bereiche rutschen.
    Googelt man nach reinterpret_cast und versucht das ganze nochmal mit double, da ist mehr Platz 😉 .

    mfg, Hans

    :schland:


Log in to reply