#include #include struct timeval tv1, tv2, stv, etv; struct timezone tz; void waitTime(int time) { (void) gettimeofday(&tv1, &tz); while (1) { (void) gettimeofday(&tv2, &tz); if ((tv2.tv_sec-tv1.tv_sec)*1000000+(tv2.tv_usec-tv1.tv_usec)- time>=-4) break; } } main() { int time, diff; int i, j, counter, counter2; int min, max; double avg; for (i=10; i<=1000000; i=i*10) { counter=0; counter2=0; min=6; max=0; avg=0.0; for (j=0; j<1000; j++) { (void) gettimeofday(&stv, &tz); waitTime(i); (void) gettimeofday(&etv, &tz); diff= (etv.tv_sec-stv.tv_sec)*1000000+(etv.tv_usec-stv.tv_usec); if (diff -i > 6) { printf("wait %dusec, diff=%dusec, stv=%d.%d, etv=%d.%d\n", i, diff, stv.tv_sec, stv.tv_usec, etv.tv_sec, etv.tv_usec) ; counter++; time = diff -i; if (min > time) min=time; if (max < time) max=time; avg+=time; } if (diff -i <-5) { printf("diff less: wait %dusec, diff=%dusec, stv=%d.%d, etv=%d.%d\n", i, diff, stv.tv_sec, stv.tv_usec, etv.tv_sec, etv.tv_usec) ; counter2++; } } avg /= counter; printf("for %dusec, j=%dtimes, error>6 counter=%d, error<-5 counter2=%d\n", i, j, counter, counter2); printf(" min=%d, max=%d, avg=%f\n", min, max, avg); } }