How to measure time in milliseconds using ANSI C? How to measure time in milliseconds using ANSI C? c c

How to measure time in milliseconds using ANSI C?


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.


#include <time.h>clock_t uptime = clock() / (CLOCKS_PER_SEC / 1000);


I always use the clock_gettime() function, returning time from the CLOCK_MONOTONIC clock. The time returned is the amount of time, in seconds and nanoseconds, since some unspecified point in the past, such as system startup of the epoch.

#include <stdio.h>#include <stdint.h>#include <time.h>int64_t timespecDiff(struct timespec *timeA_p, struct timespec *timeB_p){  return ((timeA_p->tv_sec * 1000000000) + timeA_p->tv_nsec) -           ((timeB_p->tv_sec * 1000000000) + timeB_p->tv_nsec);}int main(int argc, char **argv){  struct timespec start, end;  clock_gettime(CLOCK_MONOTONIC, &start);  // Some code I am interested in measuring   clock_gettime(CLOCK_MONOTONIC, &end);  uint64_t timeElapsed = timespecDiff(&end, &start);}