void setTimer(const timer_t timerid, const long double millis, const long double imillis) { struct itimerspec timeout; timeout.it_value = getTimespec(millis); timeout.it_interval = getTimespec(imillis); errno = 0; if (timer_settime(timerid, 0, &timeout, NULL) != 0) ERREXIT("Cannot set timer: %s", strerror(errno)); }
static void CmiIdleLock_sleep(CmiIdleLock *l,int msTimeout) { struct timespec wakeup; if (l->hasMessages) return; l->isSleeping=1; MACHSTATE(4,"Processor going to sleep {") pthread_mutex_lock(&l->mutex); getTimespec(msTimeout,&wakeup); while (!l->hasMessages) if (ETIMEDOUT==pthread_cond_timedwait(&l->cond,&l->mutex,&wakeup)) break; pthread_mutex_unlock(&l->mutex); MACHSTATE(4,"} Processor awake again") l->isSleeping=0; }