#include /* Uses UNIX timers to actually time an interval */ void start_timer() { struct itimerval rval, pval, roval, poval; /*First set the real timer*/ rval.it_value.tv_sec = 10000; rval.it_value.tv_usec = 0; rval.it_interval.tv_sec = 0; rval.it_interval.tv_usec = 0; setitimer(ITIMER_REAL, &rval, &roval); /*Now set the process timer*/ pval.it_value.tv_sec = 10000; pval.it_value.tv_usec = 0; pval.it_interval.tv_sec = 0; pval.it_interval.tv_usec = 0; setitimer(ITIMER_PROF, &pval, &poval); } /* Returns the number of real seconds since last call to start_timer() */ double all_seconds() { struct itimerval val; long secs, usecs; double temp; getitimer(ITIMER_REAL, &val); secs = 10000 - val.it_value.tv_sec - 1; usecs = 1000000 - val.it_value.tv_usec; temp = (double) secs + ((double) usecs/1000000.0); return(temp); } /* Returns the number of process seconds since last call to start_timer() */ double user_seconds() { struct itimerval val; long secs, usecs; double temp; getitimer(ITIMER_PROF, &val); secs = 10000 - val.it_value.tv_sec - 1; usecs = 1000000 - val.it_value.tv_usec; temp = (double) secs + ((double) usecs/1000000.0); return(temp); }