[C con Clase] Ayuda con programación POSIX (mutex y variables condición)

Programante programante en gmail.com
Vie Mayo 22 18:56:06 CEST 2009


Javier Cancio del Busto escribió:
> Buenas!
>
> Estoy con un programa en el que necesito que un cierto hilo se
> suspenda durante un tiempo X. Para ello tenemos que utilizar la
> función |nt pthread_cond_timedwait(pthread_cond_t *restrict /cond/,
> pthread_mutex_t *restrict /mutex/, const struct timespec *restrict
> /abstime/);|
>
> La cual devuelve el error ETIMEDOUT si se supera el tiempo indicado
> por abstime y no se ha despertado el hilo. Mis dudas son:
>
> 1) ¿Cómo puedo especificar, mediante el tercer argumento, que espere
> por ejemplo 0.5 s? Creo la estructura, la cual tiene dos atributos,
> tv_sec y tv_nsec, pero si pongo tv_sec=0.5 no parece funcionar bien.
La estructura timespec tiene dos campos, tv_sec y tv_nsec, que indican
respectivamente el número de segundos y nanosegundos a esperar.
Para esperar 0.5 segundos, tienes que poner tv_sec a 0 y tv_nsec a
500000000 (5*10^8)

Es igual a como se hace con la estructura timeval, sólo que en ella en
vez de tv_nsec, tiene el campo tv_usec en microsegundos.

> 2) ¿Cómo puedo capturar el error ETIMEDOUT? Lo hago con un if
> (pthread_cond_timedwait(&variable, &mutex, &tiempo)==ETIMEDOUT) {
> codigo } pero al compilar me dice que ETIMEDOUT no está definida (he
> incluido las cabeceras pthread.h y time.h sin embargo sigue saliendo
> ese error... ¿Debo añadir la cabecera errno.h?.

ETIMEDOUT está definida en errno.h, tienes que incluirla aparte.




Más información sobre la lista de distribución Cconclase