[Pr�via] [Pr�xima] [Pr�via por assunto] [Pr�xima por assunto]
[�ndice cronol�gico] [�ndice de assunto]

Re: Duvida no EP2 - funcao sleep()



On Tue, 30 Apr 2002, Rodrigo Mendes Leme wrote:

>    Prof. Reverbel,
> 
>    Gostariamos de saber se existe uma funcao analoga a sleep() para
> threads.
>    O problema com sleep() eh que ele interrompe o processo todo, mas
> nos so queremos parar uma thread.
> 
> Atenciosamente,
> Leonardo e Rodrigo

N�o existe... E voc�s tem raz�o quanto ao sleep(), ele n�o deve ser 
usado. Vamos ter que usar pthread_cond_timedwait(), o que � bem
esquisito neste caso, mas funciona.

Definam uma condition variable dummy, que _nunca_ ser� sinalizada,
e um mutex _por_thread_ que precisar de um "thread sleep":

    pthread_cont_t dummy = PTHREAD_COND_INITIALIZER; 
    pthread_mutex_t mutex_da_thread = PTHREAD_MUTEX_INITIALIZER;

Quando quiser que uma thread durma, preencha uma struc timespec tempo
com o tempo at� ela acordar e diga:

    pthread_mutex_lock(&mutex_da_thread);
    pthread_cond_timedwait(&dummy, &mutex_da_thread, &tempo);

Como ning�em d� signal na vari�vel de condi��o dummy, a thread s�
acorda quando o tempo especificado passar. A fun��o 
pthread_cond_timedwait() espera receber como segundo par�metro
um mutex travado, o qual ser� destravado por ela. Essa � a raz�o 
da chamada pthread_mutex_lock() antes da pthread_cond_timedwait().

Reverbel