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 <= 200611)
9 #if !defined(sched_yield)
10 # define sched_yield() \
11 do{ struct timespec ts; \
12 ts.tv_sec = 0; \
13 ts.tv_nsec = 0; \
14 nanosleep(&ts, 0); \
15 }while(0)
16 #endif
17 #endif
19 int
20 p9sleep(long milli)
21 {
22 struct timeval tv;
24 if(milli == 0){
25 sched_yield();
26 return 0;
27 }
29 tv.tv_sec = milli/1000;
30 tv.tv_usec = (milli%1000)*1000;
31 return select(0, 0, 0, 0, &tv);
32 }
34 long
35 p9alarm(ulong milli)
36 {
37 struct itimerval itv;
38 struct itimerval oitv;
40 itv.it_interval.tv_sec = 0;
41 itv.it_interval.tv_usec = 0;
42 itv.it_value.tv_sec = milli/1000;
43 itv.it_value.tv_usec = (milli%1000)*1000;
44 if(setitimer(ITIMER_REAL, &itv, &oitv) < 0)
45 return -1;
46 return oitv.it_value.tv_sec*1000+oitv.it_value.tv_usec/1000;
47 }