[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