use process error use time boolean lsleep_inited = 0 lsleep_init() Sigact(SIGALRM, catch_signal_null) lsleep_inited = 1 lsleep(num dt) if !lsleep_inited lsleep_init() # itimerval v # rtime_to_timeval(dt, &v.it_value) # v.it_interval.tv_sec = v.it_interval.tv_usec = 0 # Setitimer(ITIMER_REAL, &v, NULL) # TODO it would be good to block then reenable signals somehow, # but don't think there is such a 'sleep'. Ualarm(dt) rsleep(dt+asleep_small/10) typedef struct itimerval itimerval Getitimer(int which, struct itimerval *value); if getitimer(which, value) failed("getitimer") Setitimer(int which, const struct itimerval *value, struct itimerval *ovalue); if setitimer(which, value, ovalue) failed("setitimer") Ualarm(num dt) itimerval v rtime_to_timeval(dt, &v.it_value) v.it_interval.tv_sec = v.it_interval.tv_usec = 0 Setitimer(ITIMER_REAL, &v, NULL) #sleep_num asleep_small = 0.03 # 0.0001 sleep_num asleep_small = 0.0002