1 #define _POSIX_C_SOURCE 199309L 2 #include <time.h> 3 #include <sys/time.h> 4 #include <assert.h> 5 #include <errno.h> 6 #include "time.h" 7 8 #if PROFILE>=1 9 float time_now; 10 #endif 11 12 struct timeval t_begin; 13 init_time(void)14void init_time(void) 15 { 16 gettimeofday(&t_begin, NULL); 17 } 18 get_time(void)19float get_time(void) 20 { 21 struct timeval t_now; 22 gettimeofday(&t_now, NULL); 23 return t_now.tv_sec-t_begin.tv_sec+(t_now.tv_usec-t_begin.tv_usec)/1000000.0; 24 } 25 sleepf(float second)26void sleepf(float second) 27 { 28 assert (second>=0); 29 struct timespec span, remain, *val, *rem, *swap_temp; 30 span.tv_sec = (int)second; 31 span.tv_nsec = (second - (int)second) * 1000000000; 32 33 val = &span; 34 rem = &remain; 35 36 while (nanosleep(val, rem) && errno==EINTR) { 37 swap_temp = val; 38 val = rem; 39 rem = swap_temp; 40 } 41 } 42 43 #if PROFILE>=1 update_time(void)44float update_time(void) 45 { 46 time_now = get_time(); 47 return time_now; 48 } 49 accu_time(float * time_var)50void accu_time(float *time_var) 51 { 52 *time_var += get_time() - time_now; 53 } 54 #endif 55