[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: dormindo threads





> Realmente, ao menos no meu micro o sleep fez apenas a thread que a
> chamou esperar...
> Alguem sabe como tirar o warning que o compilador faz quando compila o
> programa com um void * sem retornar nada?


Tente colocar


return NULL;

no final da função.
Ainda não me deu problemas, mas pelo menos eliminou o warning....


[]'s



-----
Nelson Guedes Paulo Junior   
E-mail:  <npaulo@linux.ime.usp.br>   UIN: 2489382 (Tender [:alpha:]*)
"LAPTOPirose é a doença causada pela urina do mouse"

On Fri, 10 May 2002, Fabio Silva Dias wrote:

> 
> Fabio
> 
> Danilo Matheus Rubio Conde wrote:
> > 
> > Ola,
> > 
> >         Estive fazendo alguns testes aqui com as funcoes sleep(secs) e
> > usleep(usecs) e cheguei a resultados que me levam a conclusoes
> > estranhas, levando em consideracao que jah foi dito nesta lista que a
> > funcao sleep() trava todos os threads.
> >         Meu teste: fiz um programinha bobo que cria dois threads. Um deles
> > chama a funcao sleep() (ou usleep(), deu na mesma) e o outro fica
> > imprimindo numeros feito louco, mesmo quando o outro thread estah
> > esperando. O segundo thread soh para quando o primeiro muda o valor de
> > uma variavel, apos esperar um tempo.
> >         Minha conclusao: como o segundo thread fica imprimindo numeros sem
> > parar, mesmo enquanto o outro estah esperando, as funcoes sleep() e
> > usleep() fazem apenas o thread que a chamou esperar. Certo ?
> >         O codigo fonte estah abaixo.
> > 
> >         Professor, estou certo ?
> > 
> > Danilo, confuso.
> > 
> > ###Codigo fonte#####
> > 
> > #include <pthread.h>
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <semaphore.h>
> > #include <unistd.h>
> > 
> > int vai;
> > 
> > void *bla () {
> >   printf("antes 1\n"); fflush(stdout);
> >   sleep(10);
> >   vai = 1;
> >   printf("depois 1\n"); fflush(stdout);
> > }
> > 
> > void *ble () {
> >   int z = 0;
> >   printf("antes 2\n"); fflush(stdout);
> >   while (!vai) printf ("%d\n", z++);
> >   printf("depois 2\n"); fflush(stdout);
> > 
> > }
> > 
> > int main () {
> > 
> >   pthread_t t1, t2;
> >   pthread_attr_t attr;
> > 
> >   pthread_attr_init(&attr);
> >   pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
> > 
> >   vai = 0;
> > 
> >   pthread_create (&t1, &attr, bla, NULL);
> >   pthread_create (&t2, &attr, ble, NULL);
> >   pthread_join (t1, NULL);
> >   pthread_join (t2, NULL);
> > 
> > }
> > 
> > ##############################
> > 
> > #### Saida ####
> > antes 1
> > antes 2
> > milhares de numeros que o segundo thread imprime...
> > depois 1
> > depois 2
> > 
> > #############
> > 
> > Fabio Silva Dias <fdias@ime.usp.br> escreveu:
> > 
> > > > Eu nao sei como usar aquela struct timespec tempo. Acho que não
> > está
> > > > dando certo o que estou tentando. Como faço para, por exempo,
> > atribuir 6
> > > > segundos a um timespec &tempo?
> > >
> > > Não sei se devo passar para aquela função o tempo a partir de agora
> > ou
> > > agora + 6 segundos...
> > > --
> > >  Fabio Silva Dias   <fdias@linux.ime.usp.br>
> > >
> > 
> > --
> > Danilo Matheus Rubio Conde   <danconde@linux.ime.usp.br>
> 
> -- 
>  Fabio Silva Dias   <fdias@linux.ime.usp.br>
>