Millisekunden messen



  • Hallo,

    ich benötige Auskunft darüber, wie lange bestimmte Vorgänge in meinem Programm dauern. Dazu habe ich folgende Klasse geschrieben. Leider stimmen die Ergebnisse aber nicht, so bekomme ich als Ausgabe über 10 Sekunden bei einem Vorgang, der nicht mal eine Sekunde dauert. Was mache ich falsch?

    #include <sys/time.h>
    
    class Timer {
    
    public:
    
    	Timer () { }
    	virtual ~Timer () { }
    
    	void reset () {
    		m_timeval = get_tv ();
    	}
    
    	unsigned int get_elapsed_ms () const {
    		timeval timeval = get_tv ();
    		return ( timeval.tv_sec - m_timeval.tv_sec ) * 1000 + ( timeval.tv_usec - m_timeval.tv_usec );
    	}
    
    private:
    
    	timeval m_timeval;
    
    	const timeval& get_tv () const {
    		static timeval tv;
    		static struct timezone tz;
    		gettimeofday ( &tv, &tz );
    		return tv;
    	}
    
    };
    

    Im Programmcode binde ich es dann folgendermaßen ein:

    Timer t;
    t.reset ();
    // [...]
    cout << t.get_elapsed_ms () << endl;
    


  • the[V]oid schrieb:

    return ( timeval.tv_sec - m_timeval.tv_sec ) * 1000 + ( timeval.tv_usec - m_timeval.tv_usec );
    

    gettimeofday liefert Microsekunden, nicht Millisekunden:

    return ( timeval.tv_sec - m_timeval.tv_sec ) * 1000000 + ( timeval.tv_usec - m_timeval.tv_usec );
    

    Und der Wert, der dabei rauskommt, sind dann natürlich auch keine Sekunden, sondern Mikrosekunden.


Anmelden zum Antworten