#include #include #include #include #define SAMPLES 1000 static double samples[SAMPLES]; static const char prog[] = "/-\\|"; #define NS 1000000000 int main(int argc, char **argv) { int i, iter; struct timespec start, end; struct timespec sleep; double base; if (argc < 2) base = .1; else base = strtod(argv[1], NULL); iter = 20 / base; if (iter > SAMPLES) iter = SAMPLES; fprintf(stderr, "%d iterations at %f sec\n", iter, base); sleep.tv_sec = 0; sleep.tv_nsec = base * NS; while (sleep.tv_nsec >= NS) { sleep.tv_sec++; sleep.tv_nsec -= NS; } for(i = 0; i < iter; i++) { double delta; fprintf(stderr, "%c\b", prog[i % (sizeof(prog)-1)]); clock_gettime(CLOCK_MONOTONIC, &start); nanosleep(&sleep, NULL); clock_gettime(CLOCK_MONOTONIC, &end); delta = (end.tv_sec * NS + end.tv_nsec) - (start.tv_sec * NS + start.tv_nsec); samples[i] = delta - (base * NS); } for(i = 0; i < iter; i++) printf("%f\n", samples[i] / NS); return 0; }