Pausando un hilo (posix pthread) unos milisegundos.
A menudo hace falta para la ejecución de un hilo ya que no queremos que consuma todo el tiempo de CPU, cuando, por ejemplo, hacemos un polling agresivo. Hay que tener en cuenta que sleep() no funciona puesto que para el proceso completamente.
Una posible solución es utilizar la siguiente función:
?Ver código CPP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <sys/time.h> #include <pthread.h> ... int VideoSource::threadWait(int milliseconds){ pthread_mutex_t mutex; pthread_cond_t condition; struct timespec timewaited; struct timeval now; if(pthread_mutex_init(&mutex,NULL)) return -1; if(pthread_cond_init(&condition,NULL)) return -1; gettimeofday(&now, NULL); timewaited.tv_sec = now.tv_sec + milliseconds / 1000; timewaited.tv_nsec = now.tv_usec*1000 + (milliseconds % 1000)*1000000; return pthread_cond_timedwait(&condition, &mutex, &timewaited); } |
Ten en cuenta que los sistemas operativos no suelen ser de tiempo real y que además, en hacer los cálculos antes de la espera, se pierda un tiempo … pero bueno, puede ser útil para algunas cosas que no requieran precisión a nivel de ciclos.
![[bRue.org] [bRue.org]](http://www.brue.org/wp-content/uploads/logo_bw.png)