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)14 void init_time(void)
15 {
16     gettimeofday(&t_begin, NULL);
17 }
18 
get_time(void)19 float 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)26 void 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)44 float update_time(void)
45 {
46     time_now = get_time();
47     return time_now;
48 }
49 
accu_time(float * time_var)50 void accu_time(float *time_var)
51 {
52     *time_var += get_time() - time_now;
53 }
54 #endif
55