147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham#include <stdio.h> 247beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham#include <unistd.h> 347beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham#include <sys/time.h> 447beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham#include <stdint.h> 547beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham 647beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Inghamint 747beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Inghamwait_a_while (useconds_t interval) 847beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham{ 947beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham int num_times = 0; 1047beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham int return_value = 1; 1147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham 1247beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham struct timeval start_time; 1347beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham gettimeofday(&start_time, NULL); 1447beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham uint64_t target = start_time.tv_sec * 1000000 + start_time.tv_usec + interval; 1547beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham 1647beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham while (1) 1747beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham { 1847beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham num_times++; 1947beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham return_value = usleep (interval); 2047beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham if (return_value != 0) 2147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham { 2247beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham struct timeval now; 2347beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham gettimeofday(&now, NULL); 2447beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham interval = target - now.tv_sec * 1000000 + now.tv_usec; 2547beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham } 2647beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham else 2747beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham break; 2847beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham } 2947beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham return num_times; 3047beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham} 3147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham 3247beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Inghamint 3347beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Inghammain (int argc, char **argv) 3447beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham{ 3547beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham printf ("stop here in main.\n"); 3647beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham int num_times = wait_a_while (argc * 1000); 3747beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham printf ("Done, took %d times.\n", num_times); 3847beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham 3947beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham return 0; 4047beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham 4147beabb1386be44e3f90dbc30a0b22c23b93a4dcJim Ingham} 42