File sleepenh.c changed (mode: 100644) (index 1d8e7c9..4039e7f) |
... |
... |
int main(int argc, char *argv[]) { |
102 |
102 |
struct timezone tz; |
struct timezone tz; |
103 |
103 |
struct itimerval itv; |
struct itimerval itv; |
104 |
104 |
struct sigaction sigact; |
struct sigaction sigact; |
105 |
|
double st; /* start time */ |
|
|
105 |
|
double st; /* sleep time */ |
106 |
106 |
double et; /* end time */ |
double et; /* end time */ |
107 |
107 |
double now; /* now */ |
double now; /* now */ |
108 |
|
double it; /* interval */ |
|
|
108 |
|
double it; /* initial time */ |
|
109 |
|
double sleep_time; /* effective time to sleep */ |
109 |
110 |
int warp = 0; |
int warp = 0; |
110 |
111 |
|
|
111 |
112 |
if ((argc > 1) && |
if ((argc > 1) && |
|
... |
... |
int main(int argc, char *argv[]) { |
161 |
162 |
} |
} |
162 |
163 |
|
|
163 |
164 |
et=it+st; |
et=it+st; |
164 |
|
it=et-now; |
|
|
165 |
|
sleep_time = et - now; |
165 |
166 |
|
|
166 |
|
if ( it < SHORTEST_SLEEP ) |
|
|
167 |
|
if (sleep_time < SHORTEST_SLEEP) |
167 |
168 |
{ |
{ |
168 |
169 |
if (warp) { |
if (warp) { |
169 |
170 |
/* warp in time -> loose events, but keep event regularity */ |
/* warp in time -> loose events, but keep event regularity */ |
170 |
171 |
int tmp; |
int tmp; |
171 |
|
double interval; |
|
172 |
172 |
|
|
173 |
|
interval = et - st; |
|
174 |
|
tmp = (now - st) / interval; |
|
175 |
|
et = st + tmp * interval; |
|
|
173 |
|
tmp = (now - it) / st; |
|
174 |
|
et = it + tmp * st; |
176 |
175 |
} |
} |
177 |
176 |
/* has already timed out, shorted than a timeslice */ |
/* has already timed out, shorted than a timeslice */ |
178 |
177 |
printf("%f\n",et); |
printf("%f\n",et); |
|
... |
... |
int main(int argc, char *argv[]) { |
185 |
184 |
sigaction (SIGALRM, &sigact, NULL); |
sigaction (SIGALRM, &sigact, NULL); |
186 |
185 |
|
|
187 |
186 |
/* set timer */ |
/* set timer */ |
188 |
|
itv.it_value.tv_sec=(long int) it; |
|
189 |
|
itv.it_value.tv_usec=((long int) (it*1000000)) % 1000000; |
|
|
187 |
|
itv.it_value.tv_sec=(long int) sleep_time; |
|
188 |
|
itv.it_value.tv_usec=((long int) (sleep_time*1000000)) % 1000000; |
190 |
189 |
itv.it_interval.tv_sec=0; |
itv.it_interval.tv_sec=0; |
191 |
190 |
itv.it_interval.tv_usec=0; |
itv.it_interval.tv_usec=0; |
192 |
191 |
setitimer(ITIMER_REAL,&itv,NULL); |
setitimer(ITIMER_REAL,&itv,NULL); |