Easily measure elapsed time

前端 未结 26 2048
栀梦
栀梦 2020-11-22 04:13

I am trying to use time() to measure various points of my program.

What I don\'t understand is why the values in the before and after are the same? I understand thi

相关标签:
26条回答
  • 2020-11-22 04:47

    On linux, clock_gettime() is one of the good choices. You must link real time library(-lrt).

    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define BILLION  1000000000L;
    
    int main( int argc, char **argv )
      {
        struct timespec start, stop;
        double accum;
    
        if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
          perror( "clock gettime" );
          exit( EXIT_FAILURE );
        }
    
        system( argv[1] );
    
        if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
          perror( "clock gettime" );
          exit( EXIT_FAILURE );
        }
    
        accum = ( stop.tv_sec - start.tv_sec )
              + ( stop.tv_nsec - start.tv_nsec )
                / BILLION;
        printf( "%lf\n", accum );
        return( EXIT_SUCCESS );
      }
    
    0 讨论(0)
  • 2020-11-22 04:49
    //***C++11 Style:***
    #include <chrono>
    
    std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
    std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
    
    std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count() << "[µs]" << std::endl;
    std::cout << "Time difference = " << std::chrono::duration_cast<std::chrono::nanoseconds> (end - begin).count() << "[ns]" << std::endl;
    
    0 讨论(0)
  • 2020-11-22 04:49

    time(NULL) returns the number of seconds elapsed since 01/01/1970 at 00:00 (the Epoch). So the difference between the two values is the number of seconds your processing took.

    int t0 = time(NULL);
    doSomthing();
    doSomthingLong();
    int t1 = time(NULL);
    
    printf ("time = %d secs\n", t1 - t0);
    

    You can get finer results with getttimeofday(), which return the current time in seconds, as time() does and also in microseconds.

    0 讨论(0)
  • 2020-11-22 04:50

    As I can see from your question, it looks like you want to know the elapsed time after execution of some piece of code. I guess you would be comfortable to see the results in second(s). If so, try using difftime() function as shown below. Hope this solves your problem.

    #include <time.h>
    #include <stdio.h>
    
    time_t start,end;
    time (&start);
    .
    .
    .
    <your code>
    .
    .
    .
    time (&end);
    double dif = difftime (end,start);
    printf ("Elasped time is %.2lf seconds.", dif );
    
    0 讨论(0)
  • 2020-11-22 04:51

    Internally the function will access the system's clock, which is why it returns different values each time you call it. In general with non-functional languages there can be many side effects and hidden state in functions which you can't see just by looking at the function's name and arguments.

    0 讨论(0)
  • 2020-11-22 04:51
    #include <ctime>
    #include <functional>
    
    using namespace std;
    
    void f() {
      clock_t begin = clock();
    
      // ...code to measure time...
    
      clock_t end = clock();
    
      function<double(double, double)> convtime = [](clock_t begin, clock_t end)
      {
         return double(end - begin) / CLOCKS_PER_SEC;
      };
    
      printf("Elapsed time: %.2g sec\n", convtime(begin, end));
    
    }
    

    Similar example to one available here, only with additional conversion function + print out.

    0 讨论(0)
提交回复
热议问题