utilização de 2 threads

1. utilização de 2 threads

JRVieira
djessirv

(usa Outra)

Enviado em 09/11/2010 - 16:14h

Oi pessoal estou a fazer um programa em C que cria dois thread, um deles "thread 1" seria responsável pela entrada da informação, e o outro, "thread 2", pela escritura desses mesmos dados num ficheiro TXT, com o nome de dados.txt.
Os dados devem ser inseridos pelo utilizador e o programa pergunta ao utilizador o seu nome e idade, e faz o que tem a fazer.
Eu tentei fazer mais não esta coreto, não consigo localizar erro, algem mi ajuda.

Aque está o meu progama

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#define TAMANHO_dados 60

void *dados()
{
string nome;
int idade;

printf("insira nome");
scanf("%c",nome);

printf("insira a idade");
scanf("%d",idade);

}

void escrever(string nome,int idade)
{

FILE *F;
int i;
if((F=fopen("dados.txt","wt"))==NULL)
printf("stderr","Erro na abertura do ficheiro");
else
{
i=0;
while(i<TAMANHO_dados)
{
fprintf(F,"%c\t%d\n",nome,idade);
i++;
}
fclose(F);
}

}

main()
{
int rc;
int rc2;
pthread_t e_th;
pthread_t f_th;

rc=pthread_create(&e_th,NULL,dados,NULL);
if(rc)
{
printf("Erro %d",rc);
exit(-1);
}

rc2=pthread_create(&f_th,NULL,escrever,NULL);
if(rc2)
{
printf("Erro %d",rc2);
exit(-1);
}


}



  


2. Re: utilização de 2 threads

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 09/11/2010 - 16:31h

Considerando que está programando em C, e não em C++:

1) Não existe "string" em C. Utilize char*;
2) Ao ler uma "string" do terminal, utilize %s no scanf, e não %c. %c é utilizado para ler caracteres isolados
3) Na função "escrever", falta um asterisco após o void.
4) Não esqueça de colocar a diretiva -lpthread na linha de compilação. Se não colocá-la, vários "undefined reference" serão jogados na tela:
Exemplo: gcc -lpthread -o executavel meu_arquivo_fonte.c

Espero ter ajudado :)


3. Re: utilização de 2 threads

Mauricio Souza Klein
Hebang

(usa Arch Linux)

Enviado em 09/11/2010 - 16:39h

Outra coisa:

Mesmo seu programa compilando, ele não fará o que você quer. Como as duas threads rodam "em paralelo", o que vai acontecer é que o terminal irá pedir a entrada de dados mas, antes mesmo de digitar alguma coisa, a thread que escreve no arquivo já terá terminado sua execução, escrevendo no arquivo os lixos de "nome" e "idade".

Para sincronizar as threads, pesquise sobre semáforos. Isso resolve seu problema.

Outra coisa: do jeito que suas funções foram declaradas, as variáveis "nome" e "idade" devem ser globais e passadas para a função escreve através do último parâmetro da chamada de pthread_create (no lugar do último NULL). Porém, o último parâmetro recebe um ponteiro para um void, logo, um cast será necessário.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts