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 :

Traitement en parallèle des évènements d'un programmes


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut Traitement en parallèle des évènements d'un programmes
    Bonjour à tous!

    Je voudrais savoir comment faire pour que mon programme puisse tourner de manière séparer? Je m'explique.
    J'ai un programme en c sur mon seveur vocal (ordi équipé d'une carte de communication téléphonique sous redhatEL3) qui reçoit les appels téléphoniques. Mais après quelques tests j'ai remarqué que le programme qui tourne ne prend pas les appels en parallèle. Quand il reçoit un 1er appel il commence à le traiter mais si un 2nd appel arrive il met en attente le 1er appel. Ce qui ne m'arrange pas vraiment. Je voudrais que le 2nd appel tourne en parallèle avec le 1er et de façon indépendante.
    Aussi dans le même élan comment faire à l'avenir pour que je puisse savoir qu'un programme peut faire les même traitements mais en parallèle et pas de façon dépendante (tel des processus père-fils)?

    Merci d'avance pour toutes vous idées !!!

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Pour ça il faut que tu crées des threads.
    Boost permet de le faire de façon portable :
    http://www.boost.org/doc/html/threads.html

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut
    Merci Eusebe! Je vais rapidement voir dans le lien envoyé

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et en français, un petit tour d'horizon : http://miles.developpez.com/tutoriels/cpp/boost/thread/

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut
    Merci Miles! c'est un peu pus confortable en français!!!

  6. #6
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    À noter que tu peux aussi utiliser des processus comme tu le voulais à la base et que ni l'usage des processus ni l'usage des threads n'est obligatoire.
    Il y a toujours la possibilité de réorganiser ton code de manière asynchrone en mono-thread si tu disposes des appels systèmes adéquats. (ce qui est le cas a priori, tu dois gérer ces appels comme des fd non ?)

  8. #8
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut Je veux être plus concret
    Bonjour à vous!
    Je n'ai pas pu m'ensortir dans la documentation des liens que vous m'avez recommandé. Du coup pour avoir un vision beaucoup plus concrete je voudrais vous présentez un bout de code et vous demandez qu'est ce qu'il faut ajouter concretement à celà pour resoudre mon problème d'une façon ou d'une autre (donc avec du code).
    voici l'extrait:
    1)- Ici c'est la définition de la fonction de jouer un message (message d'accueil par exemple) du serveur vocal.

    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
    int BChannel::myPlayMessage()
     {
      int   ret;
      CTA_EVENT     nextevent;
     
      if( vceOpenFile( ctahd, flist[fnum].nom, VCE_FILETYPE_VOX, VCE_PLAY_ONLY,
                       ADI_ENCODE_NMS_32, &vcehd) != SUCCESS)
          return FAILURE;
     
      if(DemoShouldReport( DEMO_REPORT_COMMENTS))
        printf("\tmyPlayMessage: joue le message %2.2d du fichier %s.vox ...\n",
                message, flist[fnum].nom);
     
      if( vcePlayList(vcehd, &message, 1, NULL) != SUCCESS )
      {
        vceClose( vcehd );
        return FAILURE;
      }
     
      ret = SUCCESS;
     
      playing = TRUE;
     
      while( playing )
      {
     
            ctaWaitEvent ( qid, &nextevent, CTA_WAIT_FOREVER );
                processEvent ( &nextevent );
      }
     }
    2)- Ici c'est l'appel de la fonction "jouer un message"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         // Message d'accueil
          fnum    = 2;// Id du fichier message
          message = 0;//position du message "accueil" ou PROMPT_WELCOME
          if((ret = myPlayMessage()) != SUCCESS)
          {
              //printf("\tMyReceiveCall: echec de lecture du message accueil %d\n",message);
          }
        }
        playing = TRUE;
    Voilà les bouts de code et si quelqu'un peut rajouter ce qu'il faut pour que cette fonction puisse être appeler plusieurs fois en même temps, se serait avec une joie explosive que je l'appliquerais!!

    merci!

    Psst! Actuellement il fait une erreur CTAERR_FUNCTION_ACTIVE qui signifie: La lecture ou l'enregistrement est déjà en activité sur le contexte.

    Balises codes ajoutées

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/08/2011, 14h17
  2. Traitement/taille pile des message/événements
    Par stephane.julien dans le forum C#
    Réponses: 6
    Dernier message: 22/06/2011, 13h47
  3. Programmer des évènements asynchrones dans une classe ?
    Par Pierre8r dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 31/10/2008, 13h17
  4. Créer des événements
    Par thebeb dans le forum MFC
    Réponses: 8
    Dernier message: 04/02/2005, 16h45

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