Zeitmessung



  • Habe ich keine Ahnung. Gibts da kein schönes Nachschlagewerk wie die Java Api Ref???



  • faleX schrieb:

    Habe ich keine Ahnung. Gibts da kein schönes Nachschlagewerk wie die Java Api Ref???

    du meinst ne "befehlsliste" zu c++?





  • edit: 2link: siehe bereits volkards post



  • Ja sowas wie das hier bei Java:
    http://java.sun.com/j2se/1.5.0/docs/api/

    Halt was schönes offizielles an das man sich halten kann.
    Wie gesagt habe C++ erst vor 3 Stunden kennengelernt.
    Machen das jetzt in der Uni.



  • Kann denn keiner mal über den Code drüber schauen und sagen was falsch ist? Ist doch recht übersichtlich, oder nicht?

    ich muss anstatt "gettimeofday(&start, 0)" was anderes schreiben. vlt sowas wie "this.gettimeofday(&start, 0)" oder "time.gettimeofday(&start, 0)" ??!

    #include <cstdlib> 
    #include <iostream> 
    #include <sys/time.h> 
    
    using namespace std; 
    
    int main(){     
      timeval start, end; 
      int length = 1000; 
      int numbers[length]; 
      for(int i=0; i<length; i++)  numbers[i]=rand()%100+1; 
    
      gettimeofday(&start, 0); 
    
      for(int k=0; k<length-1; k++){ 
        for(int i=0; i<length; i++){ 
          if(numbers[i]>numbers[i+1]){ 
            int hilf = numbers[i]; 
            numbers[i] = numbers[i+1]; 
            numbers[i+1] = hilf; 
          } 
        }     
      } 
    
      gettimeofday(&end, 0); 
    
      //for(int i=0; i<length; i++) cout << numbers[i] << ", "; 
      //cout << endl; 
    
      cout << "Start: "<< start.tv_sec << ":" << start.tv_usec << endl; 
      cout << "Ende: " << end.tv_sec << ":" << end.tv_usec << endl; 
    
      system("PAUSE"); 
      return EXIT_SUCCESS; 
    }
    


  • versuch' mal, statt der gettimeofday() Aufrufe man: time(3) zu verwenden:

    time_t start=time(NULL);
    //Berechnung
    time_t ende=time(NULL);
    cout<<"Start:"<<start<<endl;
    cout<<"Ende :"<<ende<<endl;
    cout<<"Diff.:"<<ende-start<<endl;
    


  • Bei solchen Zeitmessungen läßt sich sehr schön das RAII-Idiom einsetzen. Das heißt "Resource Acquisition Is Initialisation".
    Mit dem Anlegen eines lokalen Objektes wird die Zeit gemerkt und im Destruktor des selben Objektes die Dauer bestimmt. Der zu messende Code befindet sich dann im gemeinsamen Code mit dem 'Stopper'-Objekt.
    Die Anwendung auf diesen Code sähe in etwa so aus:

    #include <cstdlib>
    #include <iostream>
    #include "Uhr.h" // s.u.
    
    int main()
    {    
        using namespace std;
        const int length = 1000;
        int numbers[length];
        for(int i=0; i<length; i++)  
            numbers[i]=rand()%100+1;
    
        Uhr uhr;
        {   // Scope für Zeit-Stoper
            Uhr::Stopper stopper( uhr );
            for(int k=0; k<length-1; k++){
                for(int i=0; i<length; i++){
                    if(numbers[i]>numbers[i+1]){
                        int hilf = numbers[i];
                        numbers[i] = numbers[i+1];
                        numbers[i+1] = hilf;
                    }
                }    
            }
        } // im Destruktor von Stopper wird die Zeit genommen
    
        cout << "Dauer: " << uhr << endl;
        return 0;
    }
    

    Eine (so hoffe ich) standard-konforme Implementierung der Klasse Uhr sähe so aus:

    // --   File Uhr.h
    #include <iostream>
    #include <time.h>
    
    class Uhr
    {
    public:
        struct Stopper
        {
            explicit Stopper( Uhr& uhr )
                : m_uhr( uhr )
            {
                m_uhr.m_start = clock();
            }
            ~Stopper()
            {
                m_uhr.m_dauer = clock() - m_uhr.m_start;
            }
        private:
            Uhr& m_uhr;
        };
    
        friend struct Stopper;
    
        friend std::ostream& operator<<( std::ostream& out, const Uhr& uhr )
        {
            return out << double( uhr.m_dauer ) / double( CLOCKS_PER_SEC ) << 's';
        }
    
    private:
        clock_t m_start;
        clock_t m_dauer;
    };
    

    Gruß
    Werner



  • Und sollte time.h nicht funktionieren, nimm ctime. 🙂



  • Thx erstmal gleich ausprobieren


Anmelden zum Antworten