Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/01/2013, 21h24   #1
khadi8
Candidat au titre de Membre du Club
 
khadidja tih
Inscription : novembre 2010
Messages : 157
Détails du profil
Informations personnelles :
Nom : khadidja tih

Informations forums :
Inscription : novembre 2010
Messages : 157
Points : 14
Points : 14
Par défaut thread(erreur de lecture d'un caractère)

Salut !
J'essaye d'écrire un programme avec deux thread le 1er permet la lecture d'un caractère et le 2eme l'afficher, j'ai une erreur avec le 1er thread qui permet la lecture voici mon code, je précise que je suis sur Linux

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<stdlib.h>
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
 
char c;
 
//fonction pour lire des caractère 
void *lecture(void *k)
{
printf("donner un caractère\n");
scanf("%s",&c);
while(c!='f' || c!='F')
{
printf("donner un caractère\n");
scanf("%s",&c);//l'erreur est ici 
printf("\n");
}
 
}
void *ecriture(void *k)
{
while(c!='f' || c!='F')
{
printf("le caractere est :%c",c);
}
}
 
int main(void)
{
pthread_t pth[2];
 
if(pthread_create(pth,0,lecture,NULL))
{
perror("pthread_create");
exit(EXIT_FAILURE);
}
 
/*if(pthread_create(pth+1,0,ecriture,NULL))
{
perror("pthread_create");
exit(EXIT_FAILURE);
 
}*/
 
if(pthread_join(pth,NULL))
perror("erreur");
 
/*if(pthread_join(pth+1,NULL))
perror("erreur");*/
}
voici l'erreur

khadi8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 22h07   #2
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 708
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 708
Points : 4 188
Points : 4 188
http://www.linux-kheops.com/doc/man/...ad_join.3.html

Voir la section "valeur renvoyée". Il te donne une liste des codes. Regarde la valeur de ce code, que tu n'affiches pas avec le code actuel.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 22h07   #3
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 390
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 390
Points : 32 032
Points : 32 032
Envoyer un message via MSN à Médinoc
Pour commencer, utilise scanf("%c"), pas %s.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 14h14   #4
Red Sno
Invité régulier
 
Homme
Inscription : décembre 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations forums :
Inscription : décembre 2012
Messages : 9
Points : 5
Points : 5
Tu fais erreur dans le traitement des erreurs
Code :
if(pthread_create(pth,0,lecture,NULL))
en cas d'echec pthread_create renvoi -1, et c'est la ou tu dois exécuter perror, de meme pour pthread_join

ce que je te conseil c'est d'enlever le traitement des erreurs vu que tu utilises de simple fonction bien définie

Une autre remarque, il faut synchroniser la fonction lecteur et la fonction rédacteur, il y a plusieurs manière de le faire, des sémaphores, ou de simple variables booléenne ce qui serait l’idéal
si tu ne les synchronise pas, la fonction afficher s’exécute plusieurs fois en affichant le même caractère

Pour terminer, il faut séparer la variable ou tu récupères le caractère, en utilisant deux variable, une pour récuperer le caractère, une autre pour faire le test (!='F' || ='f') et d'envoyer première variable à la fonction afficher

Bon courage
Red Sno est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/01/2013, 17h53   #5
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 708
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 708
Points : 4 188
Points : 4 188
Citation:
ce que je te conseil c'est d'enlever le traitement des erreurs vu que tu utilises de simple fonction bien définie
Euh.... Pourquoi ?
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 18h03   #6
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 443
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2008
Messages : 10 443
Points : 40 264
Points : 40 264
Bonjour,

Citation:
Envoyé par Red Sno Voir le message
ce que je te conseil c'est d'enlever le traitement des erreurs vu que tu utilises de simple fonction bien définie

Mais si bien définie et sûre, il faut vérifier les erreurs, car il arrive toujours que l'utilisateur ne sache pas les utiliser correctement, ou encore, qu'il insère de mauvais paramètres et que cela provoque crash ou autre.
Ce n'est pas parce que l'on vous donne des outils surs, que vous n'allez pas essayer de me planter un clou avec une perceuse (c'est une image bien sur).
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h17.


 
 
 
 
Partenaires

Hébergement Web