The function gettimeofday can be used to retrieve the total number of seconds and balance microseconds elapsed since EPOCH.
Structure timeval looks like this :
struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ };
On Linux it can be done like this :
/** * Get time difference in microseconds * */ #include <stdio.h> #include <sys/time.h> double time_diff(struct timeval x , struct timeval y); int main() { int i; struct timeval before , after; gettimeofday(&before , NULL); //Time taking task for (i=1 ; i <= 100 ; i++) { printf("%d %d %d n",i, i*i, i*i*i); } gettimeofday(&after , NULL); printf("Total time elapsed : %.0lf us" , time_diff(before , after) ); return 0; } double time_diff(struct timeval x , struct timeval y) { double x_ms , y_ms , diff; x_ms = (double)x.tv_sec*1000000 + (double)x.tv_usec; y_ms = (double)y.tv_sec*1000000 + (double)y.tv_usec; diff = (double)y_ms - (double)x_ms; return diff; }
That’s really not the best way to do it, as you lose precision by forming two doubles and subtracting them. Much better to do the subtraction of timevals (using the BSD timersub() function if you have it) and then create a double from the result. If you don’t have timersub(), try
double timediff = (y.tv_sec – x.tv_sec) + 1e-6 * (y.tv_usec – x.tv_usec); /* in seconds */
And certainly don’t cast x_ms and y_ms to double – a cast is a warning of something that requires greater scrutiny, and over-using is like crying wolf – if it’s all over the place, it loses its shock value.