Exemple #1
0
bool ThreadSleeper::sleep(Timeout timeout) {
	if (timeout.isInfinite()) {
		sem_wait(&semaphore);
	} else {
		timespec tmspc = timeout.getExpireTime().getTimeSpec();
		int res = sem_timedwait(&semaphore,&tmspc);
		if (res == -1) {
			int e = errno;
			if (e == ETIMEDOUT) return true;
			if (e != EINTR) throw ErrNoException(THISLOCATION,e);
			//Consider EINTR as wakeUp
			return false;
		}
	}
	while (sem_trywait(&semaphore) == 0) {}
	return false;
}