[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Re: dormindo threads
- Subject: Re: dormindo threads
- From: Nelson Guedes Paulo Junior <npaulo@linux.ime.usp.br>
- Date: Mon, 13 May 2002 09:24:01 -0300 (BRT)
> 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>
>