time.h => clock()



  • Die Funktion clock() aus der time.h arbeitet nach meinem wissen so:
    Sie misst ganz einfach die Zeit, die von ersten Aufruf bis zum zweiten vergeht; danach die Zeit die vom ersten Aufruf bis zum dritten vergeht; u.s.w.

    Meine Frage ist:
    Kann man den Wert irgendwie wieder 0 setzen?

    Stellt's euch so vor:

    clock_t clk;
    do
    {
    clock();
    //Berechnungen
    clk=clock;
    }
    while(/*irgendwas*/);
    


  • Das ist so nicht richtig. Mit der Funktion clock() wird die verbrauchte CPU-Zeit ermittelt, also die CPU-Zeit die dein Programm seit seinem Start verbraucht hat. Um den Zeitraum zwischen zwei Aufrufen von Clock zu ermitteln mußt Du deren Differenz errechnen.



  • Danke, wieder etwas dazugelernt.
    Allerdings ist da ein Problem:
    Die Schleife bei:

    clock_t clk;
    do
    {
    clock();
    //Berechnungen
    clk=clock;
    }
    while(/*irgendwas*/);
    

    wird sehr oft durchlaufen, weshalb clk irgendwann voll ist.

    Was kann ich tun?



  • was meinst Du mit "voll" ?



  • |M| schrieb:

    Danke, wieder etwas dazugelernt.
    Allerdings ist da ein Problem:
    Die Schleife bei:

    clock_t clk;
    do
    {
    clock();
    //Berechnungen
    clk=clock;
    }
    while(/*irgendwas*/);
    

    wird sehr oft durchlaufen, weshalb clk irgendwann voll ist.

    Was kann ich tun?

    Die Antworten lesen die du bekommst. Der Code ist blödsinn, und "clk" wird nicht "voll", weil das attribut "voll" auf eine Variable in C++ bezogen Blödsinn ist.
    Und wie lange etwas braucht misst man indem man sich vorher und nachher einen Timestamp holt, ala

    clock_t t0 = clock();
        // tu was
        clock_t t1 = clock();
        int dauer = t1 - t0;
    


  • Anbei ein konkretes Beispiel:

    // Zeitmessung
    
    #include <iostream>
    #include <ctime>   // clock_t, clock(), ...
    #include <conio.h> // getch()
    #include <cmath>   // sin(...), cos(...)
    using namespace std;
    
    int main()
    {
      const int NMAX = 20;
      int max;
      cout << "Anzahl Schleifendurchlaeufe? ";
      cin >> max;
      clock_t t1,t2;
      double ts, tm=0;
    
      double a;
    
      cout << endl;
      for( int n=0; n<NMAX; ++n )
      {
          t1 = clock(); // Start
          for( int i=0; i<max; i++ ) 
          {
            a = sin(a); //zu messende Aktion 1
          } 
          t2 = clock(); // Ende
          ts = (t2-t1)/static_cast<float>(CLOCKS_PER_SEC); // Zeit in Sekunden.
          cout << "Zeit Aktion 1: " << ts << " sec" << endl;
          tm += ts;      
      }
      tm /= NMAX; 
      cout << "Durchschnitts-Zeit bei Aktion 1: " << tm << " sec" << endl;
    
      tm=0;
      cout << endl;
      for( int n=0; n<NMAX; ++n )
      {
          t1 = clock();
          for( int i=0; i<max; i++ ) 
          {
            a = cos(a); //zu messende Aktion 2
          } 
          t2 = clock();
          ts = (t2-t1)/static_cast<float>(CLOCKS_PER_SEC);
          cout << "Zeit bei Aktion 2: " << ts << " sec" << endl;
          tm += ts;    
      }
      tm /= NMAX;
      cout << "Durchschnitts-Zeit bei Aktion 2: " << tm << " sec" << endl;
    
      getch();
    }
    


  • Danke!


Anmelden zum Antworten