rafaelarbl Postado Maio 7, 2016 Denunciar Share Postado Maio 7, 2016 (editado) Nada. /* gcc nome.c -o nome -lpthread */ main(){ pthread_t t1, t2, t3, t4; //cria as threads (void) pthread_create(&t1, NULL, sensor1, NULL); //chama as threads (void) pthread_join(t1,NULL); } Editado Maio 7, 2016 por rafaelarbl Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aristóteles Postado Maio 7, 2016 Denunciar Share Postado Maio 7, 2016 9 horas atrás, rafaelarbl disse: Problemas deste código:Primeiro. Ele gera um primeiro número randômico e nunca mais. Eu queria um número randômico para cada execução. : Para isso, inclua a biblioteca time.h, e coloque srand (time(NULL)), de preferência logo no inicio da função main. Exemplo: #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { srand (time(NULL)); int a; a = 1 + rand () % 100; printf ("\n%d\n", a); return 0; } 9 horas atrás, rafaelarbl disse: Segundo. Ele atribui valores de temperatura na coluna dos valores de saturação de oxigênio, e valores de saturação de oxigênio na coluna da temperatura. Sendo que eu nunca disse para ele fazer isso no código! Eu não sei por que ele faz isso! (...) Repare no tamanho que você define sua matriz: int matriz[100][2]; Lembre-se, vetores iniciam no zero e vão até o tamanho -1. Nesse caso, de 0 a 99 linhas, e 0 a 1 colunas. O provável erro está nessa parte: int a = ; for (a = ; a<101; a++) { matriz[a][] = 10; matriz[a][1] = 100; matriz[a][2] = 100; } Você está usando a sua matriz como se fosse de 0 a 100 linhas e não 0 a 99, pois <<a>> é incrementado de 0 até 100 e está usando 0 a 2 colunas. Para resolver isso é simples. Se você quiser uma matriz que vai de 0 a 100 linhas, e 0 a 2 colunas: int matriz [101][3]. se quer de 0 a 99 linhas e 0 a 2 colunas: int matriz [100][3]. Feita essa correção, ajuste esse for e o seu programa estará redondinho. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rafaelarbl Postado Maio 7, 2016 Autor Denunciar Share Postado Maio 7, 2016 2 horas atrás, Aristóteles disse: Para isso, inclua a biblioteca time.h, e coloque srand (time(NULL)), de preferência logo no inicio da função main. incluí a biblioteca time e coloquei o srand (time(NULL)) no início da função main. Não arrumou os aleatórios. Troquei o srand (time(NULL)) de lugar, e coloquei dentro das threads, dentro do while(1), antes da seção crítica. Não arrumou, também. Por último: tentei colocar o srand (time(NULL)) dentro da seção crítica. Também não arrumou. Em qualquer alteração que eu fizesse era como se eu não fizesse alteração nenhuma... É como se a função não interferisse com o aleatório. 2 horas atrás, Aristóteles disse: Você está usando a sua matriz como se fosse de 0 a 100 linhas e não 0 a 99, pois <<a>> é incrementado de 0 até 100 e está usando 0 a 2 colunas. Para resolver isso é simples. Se você quiser uma matriz que vai de 0 a 100 linhas, e 0 a 2 colunas: int matriz [100][3]. Noooooossa.... Eu sou uma anta! Hahahaha ^^' Ok, arrumei, ficou certinho. Não deu mais o segundo problema. Obrigada, tu é um gênio ! Agora só falta arrumar o primeiro problema, vou dar uma pesquisada nas funções que tu citou para ver se eu encontro alguma coisa. Se puder ajudar: ele só começou a dar esse problema dos números randômicos quando eu usei mutex para proteger a seção crítica. A partir daí ele não varia mais os randômicos. Antes variava normalmente. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Aristóteles Postado Maio 7, 2016 Denunciar Share Postado Maio 7, 2016 2 horas atrás, rafaelarbl disse: Se puder ajudar: ele só começou a dar esse problema dos números randômicos quando eu usei mutex para proteger a seção crítica. A partir daí ele não varia mais os randômicos. Antes variava normalmente. Pode ser aí o problema. :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rafaelarbl Postado Maio 7, 2016 Autor Denunciar Share Postado Maio 7, 2016 Só que não é. Estou fazendo uns testes olha, nem isso funciona: #include <stdio.h> #include <stdlib.h> #include <time.h> main() { int a = 0; srand (time(NULL)); while(1) { while (a<20) { a = rand() % 100; } printf("%d\n",a); } } Não sei nem mais por que nem como funcionou antes... P.S. ( se colocar o srand (time(NULL)) dentro do while(1) não funciona igual... Ok entendi. A declaração da variável precisa estar dentro do while (1) era só isso. agora está tudo funcionando. (sei lá porque a declaração tem que estar dentro mas enfim) É verdade entendi. É que se eu não zerar ela entre uma execução e a outra então ela já vai estar "boa": não vai nem precisar entrar no "while (temp< 30)" (por exemplo). E daí ela nunca vai variar mesmo. Entendi tudo. Obrigada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
rafaelarbl
Nada.
/* gcc nome.c -o nome -lpthread */ main(){ pthread_t t1, t2, t3, t4; //cria as threads (void) pthread_create(&t1, NULL, sensor1, NULL); //chama as threads (void) pthread_join(t1,NULL); }
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.