Files
Le-Compte-est-Bon/timer.c

64 lines
1.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NANOSEC 1000000000.0
#define MILLISEC 1000
static struct timespec start;
void start_timer()
{
printf("timer started...\n");
clock_gettime(CLOCK_MONOTONIC, &start);
# ifdef DEBUG_TIMER
printf("sec=%d nsec=%d\n", start.tv_sec, start.tv_nsec);
# endif
}
void set_timer(timer)
struct timespec *timer;
{
clock_gettime(CLOCK_MONOTONIC, timer);
# ifdef DEBUG_TIMER
printf("timer: sec=%d nsec=%d orig: sec=%ld nsec=%ld\n",
timer->tv_sec, timer->tv_nsec, start.tv_sec, start.tv_nsec);
# endif
}
double get_timer(timer)
struct timespec timer;
{
double diff;
diff=(timer.tv_sec - start.tv_sec) + (timer.tv_nsec - start.tv_nsec) / NANOSEC;
# ifdef DEBUG_TIMER
printf("timer sec: %.5f\n", diff);
# endif
return diff;
}
#ifdef STANDALONE
int main(ac, av)
int ac;
char **av;
{
int delay;
struct timespec end, tsdelay;
if (ac != 2) {
fprintf(stderr, "usage: %s msecs\n", *av);
exit (1);
}
delay=atoi(*(av+1));
start_timer();
tsdelay.tv_sec=delay/MILLISEC;
tsdelay.tv_nsec=delay%MILLISEC;
printf("delay %d=%ld:%ld\n", delay, tsdelay.tv_sec, tsdelay.tv_nsec);
nanosleep(&tsdelay, NULL);
set_timer(&end);
printf("Time elapsed: %.5f seconds\n", get_timer(end));
return 0;
}
#endif