Search code examples
cportabilitytime-precision

How to measure time in milliseconds using ANSI C?


Using only ANSI C, is there any way to measure time with milliseconds precision or more? I was browsing time.h but I only found second precision functions.


Solution

  • There is no ANSI C function that provides better than 1 second time resolution but the POSIX function gettimeofday provides microsecond resolution. The clock function only measures the amount of time that a process has spent executing and is not accurate on many systems.

    You can use this function like this:

    struct timeval tval_before, tval_after, tval_result;
    
    gettimeofday(&tval_before, NULL);
    
    // Some code you want to time, for example:
    sleep(1);
    
    gettimeofday(&tval_after, NULL);
    
    timersub(&tval_after, &tval_before, &tval_result);
    
    printf("Time elapsed: %ld.%06ld\n", (long int)tval_result.tv_sec, (long int)tval_result.tv_usec);
    

    This returns Time elapsed: 1.000870 on my machine.