sleep.c - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       sleep.c (889B)
       ---
            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>
            7 
            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
           18 
           19 int
           20 p9sleep(long milli)
           21 {
           22         struct timeval tv;
           23 
           24         if(milli == 0){
           25                 sched_yield();
           26                 return 0;
           27         }
           28 
           29         tv.tv_sec = milli/1000;
           30         tv.tv_usec = (milli%1000)*1000;
           31         return select(0, 0, 0, 0, &tv);
           32 }
           33 
           34 long
           35 p9alarm(ulong milli)
           36 {
           37         struct itimerval itv;
           38         struct itimerval oitv;
           39 
           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 }