| #include <u.h> |
| #define NOPLAN9DEFINES |
| #include <sys/param.h> |
| #include <sys/time.h> |
| #include <sched.h> |
| #include <libc.h> |
| |
| #if defined(__NetBSD__) || (defined(__OpenBSD__) && OpenBSD <= 200611) |
| #if !defined(sched_yield) |
| # define sched_yield() \ |
| do{ struct timespec ts; \ |
| ts.tv_sec = 0; \ |
| ts.tv_nsec = 0; \ |
| nanosleep(&ts, 0); \ |
| }while(0) |
| #endif |
| #endif |
| |
| int |
| p9sleep(long milli) |
| { |
| struct timeval tv; |
| |
| if(milli == 0){ |
| sched_yield(); |
| return 0; |
| } |
| |
| tv.tv_sec = milli/1000; |
| tv.tv_usec = (milli%1000)*1000; |
| return select(0, 0, 0, 0, &tv); |
| } |
| |
| long |
| p9alarm(ulong milli) |
| { |
| struct itimerval itv; |
| struct itimerval oitv; |
| |
| itv.it_interval.tv_sec = 0; |
| itv.it_interval.tv_usec = 0; |
| itv.it_value.tv_sec = milli/1000; |
| itv.it_value.tv_usec = (milli%1000)*1000; |
| if(setitimer(ITIMER_REAL, &itv, &oitv) < 0) |
| return -1; |
| return oitv.it_value.tv_sec*1000+oitv.it_value.tv_usec/1000; |
| } |