IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

thread(erreur de lecture d'un caractère)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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


  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    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.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    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.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut
    Tu fais erreur dans le traitement des erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    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 ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 136
    Billets dans le blog
    150
    Par défaut
    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

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Erreur en lecture de caractères
    Par orphee03 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 29/08/2013, 11h56
  2. Erreur de lecture sur BD Access avec delphi
    Par e120650 dans le forum Bases de données
    Réponses: 1
    Dernier message: 10/06/2005, 10h17
  3. [MFC] thread : erreur bloquante
    Par Joeleclems dans le forum MFC
    Réponses: 4
    Dernier message: 20/05/2005, 13h58
  4. Erreur de lecture du flux sous SQLServer
    Par smazaudi dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/03/2005, 14h30
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo