Blob


1 #include <u.h>
2 #define NOPLAN9DEFINES
3 #include <sys/param.h>
4 #include <sys/time.h>
5 #include <sched.h>
6 #include <libc.h>
8 #if defined(__NetBSD__) || (defined(__OpenBSD__) && OpenBSD <= 200511)
9 # define sched_yield() \
10 do{ struct timespec ts; \
11 ts.tv_sec = 0; \
12 ts.tv_nsec = 0; \
13 nanosleep(&ts, 0); \
14 }while(0)
15 #endif
17 int
18 p9sleep(long milli)
19 {
20 struct timeval tv;
22 if(milli == 0){
23 sched_yield();
24 return 0;
25 }
27 tv.tv_sec = milli/1000;
28 tv.tv_usec = (milli%1000)*1000;
29 return select(0, 0, 0, 0, &tv);
30 }
32 long
33 p9alarm(ulong milli)
34 {
35 struct itimerval itv;
36 struct itimerval oitv;
38 itv.it_interval.tv_sec = 0;
39 itv.it_interval.tv_usec = 0;
40 itv.it_value.tv_sec = milli/1000;
41 itv.it_value.tv_usec = (milli%1000)*1000;
42 if(setitimer(ITIMER_REAL, &itv, &oitv) < 0)
43 return -1;
44 return oitv.it_value.tv_sec*1000+oitv.it_value.tv_usec/1000;
45 }