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

Threads & Processus C++ Discussion :

Gérer les threads / Mutex


Sujet :

Threads & Processus C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Gérer les threads / Mutex
    Bonjour ,

    J'essaie de développer une appli client-serveur , mais je rencontre quelques soucis pour gérer tout cela et faire ce que je veux .

    Je vous résume le truc :

    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
    void * threadenvoi(void * arg) /* Thread s'occupant de l'envoi */
    {
        /* Tant que le message envoyé n'est pas égal à fin */
    	{
                    //  On lit le message
     
           }
       	 /* ................. */
    	pthread_exit (EXIT_SUCCESS)    
    }
     
    void * threadrecevoir(void * arg) /* Thread s'occupant de la reception */
    {
     
     /* Tant que le message envoyé n'est pas égal à fin */
    	{
         	  	 cout << " resultat " << endl;
    		cout << message_qui_a_ete_recu << endl;
    	}
    	/* ....................... */
    	pthread_exit (EXIT_SUCCESS);
    }
     
    void * threadrecevoirerreur(void * arg)
    {
     
     
      while(....) 
        {
    	/* On recoit le message erreur */
     
        }
        /* ............................... */
    	pthread_exit (EXIT_SUCCESS);
     
    }
     
     
        pthread_create(&envoyer, NULL, threadenvoi,(void*)NULL);
    pthread_create(&recevoir, NULL, threadrecevoir,(void*)NULL);
         pthread_create(&recevoirErr,NULL,threadrecevoirerreur,(void*)NULL);
    pthread_join(recevoirErr,NULL);

    Le truc , c'est qu'on a 3 threads en boucle infini , et que il y a 3 étapes :
    Lecture du message
    Reception du message
    Reception du message erreur

    Sauf que niveau resultat , la lecture est ok , mais du fait des threads , le message d'erreur arrive des fois avant le message lui même et vice versa .

    Du coup , je me demandais comment faire pour qu'il y ait cet ordre précis :

    Lecture du message
    Reception du message
    Reception du message erreur

    J'espère que vous saurez m'aider ..
    Dernière modification par Invité ; 05/06/2013 à 21h23.

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Si la gestion du message et du message d'erreur ne sont pas liés, ce n'est pas grave (?)

    Si c'est pour l'affichage, tu peux passer pas un objet communs aux threads qui va remettre les messages dans l'ordre (grâce à un id par exemple).

    Si la gestion du message et du message d'erreur sont liés et doivent se faire dans un ordre précis, peut-être que l'utilisation de thread n'a pas de sens.

  3. #3
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 869
    Par défaut
    Si tu lis toujours un message avant de répondre, un seul thread est amplement suffisant.

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par tchoumo Voir le message
    Du coup , je me demandais comment faire pour qu'il y ait cet ordre précis :

    Lecture du message
    Reception du message
    Reception du message erreur
    Il suffit de tout mettre dans le même thread.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Le truc, c'est qu'il faut que je fasse un client multi threadé car il faut que je puisse gérer différentes sockets .

    Les 3 threads , un pour chaque socket , est obligatoire .

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Multiplexage ? (comme select pour GNU/Linux en C)
    Bon après il faudra de toute façon réorganiser les messages dans l'ordre.

    Peut être que le plus judicieux est de demander au client d'envoyer le message et le message d'erreur en même temps (via une structure par exemple).

  7. #7
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 869
    Par défaut
    Je vois pas vraiment le problème. Une socket se connecte, tu crées un thread dans lequel elle sera gérée. Un thread par socket donc.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Le truc de la structure contenant le message et l'erreur est une très bonne idée .

    Cependant , j'ai certaines règles , comme 3 threads avec un Thread gérant 1 socket ( 3 socket pour les 3 étapes )

  9. #9
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Sous réserve de bien comprendre le problème, ce qui se fait généralement c'est d'assigner un identifiant unique à chaque message. Tu pourrais donc utiliser cet identifiant unique (généralement en début de trame), pour pairer les messages et leur message d'erreur correspondant.

    Car une chose est sure en TCP/UDP, même si ton client envoie deux trames dans un ordre donné, tu ne peux pas être sûr (sauf rare exception) qu'elles vont arriver dans le même ordre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gérer les exceptions dans un thread
    Par Pynouz dans le forum C#
    Réponses: 5
    Dernier message: 06/10/2011, 12h29
  2. Comment créer un thread qui puisse gérer les éléments de l'IHM
    Par SuperSeb95 dans le forum Multithreading
    Réponses: 14
    Dernier message: 18/05/2011, 11h43
  3. les thread et mutex et cond
    Par quark22 dans le forum Débuter
    Réponses: 3
    Dernier message: 10/07/2010, 18h01
  4. [Pascal / SDL] Problème pour gérer les Threads…
    Par Sn00ze92 dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2009, 17h40
  5. gérer les threads
    Par youp_db dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 08/01/2006, 16h42

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