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 :

Gestion d évènements


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Par défaut Gestion d évènements
    Bonjour,

    je spécifie actuellement un programme multitâches qui va etre codé en c++.

    J'aimerais pouvoir mettre mes tâches en attente d'évènements par exemple :

    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
     
     
    while(1) {
    wait_event(&event)
     
    switch(event) {
    case event1 :
    //action1
    break;
    case event2 :
    //action2
    break;
    }
     
    }
    Je ne connais pas de fonction en c++ ni de structure ni de librairies qui permet de faire çà. Quelqu'un a t'il une idée?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Comment est implémenté le multitâches dans ton programme?

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Attention, c'est une réponse purement Microsoft

    Il existe des Evenements (point d'entrée ici http://msdn2.microsoft.com/en-us/lib...55(VS.85).aspx) ou des mutex (point d'entrée ici http://msdn2.microsoft.com/en-us/lib...66(VS.85).aspx) pour faire ce genre de choses.

    Ces objets peuvent être bloquants avec des fonctions d'attente (point d'entrée ici http://msdn2.microsoft.com/en-us/lib...69(VS.85).aspx)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre averti
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Par défaut
    Je travaille sosu linux (kubuntu).
    J'ai crée une classe CThread ainsi qu'un classe CMutex pour gerer le partage de ressources.

    Ci dessous le header de ma classe thread :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     class CThread
     {
     
     private:
     int  hThread;
     pthread_t ThreadId;
     long Stacksize;
     bool Detach;
     int Priority;
     
     //thread
     friend void * Thread(void *);
     
     protected:
     //fonction virtuelle appelée par le thread
     virtual void Run(void) = 0;
     
     static void Exit()
          { pthread_exit(0);}
     
     int setcancelstate(int state);
     
     void setcancelpoint();
     
     int setcanceltype(int type);
     
     public:
     
     CMutex *mutex;
     
     //constructeur
     CThread(int _priority = 1, long _stacksize = 2048, bool _detach = true, CMutex * mutex = NULL);
     //destructeur
     ~CThread();
     
     //lancer le thread
     void Start(void);
     
     //terminer le thread (brutal)
     void Terminate(void);
     
     //retourne l'activité du thread
     bool IsRunning(void) const;
     
     //retourne le handle du thread
     int GetHandle(void) const;
     
     //retourne l'identifiant du thread
     pthread_t GetID(void) const;
     
    //joindre le thread si il n'est pas detache
     int join();
     
    //attacher un mutex au thread 
    void SetMutex(CMutex * _mutex);
     
     //attend la fin du thread
     //long Wait(long dwTimeOut) const;
     };
    Pour creer un thread je crée une classe fille de CThread, je surcharge la methode run() (qui contient ce que fait la tache) et lance la methode start.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Je ne suis pas expert en la matière mais tu pourrais utiliser les tubes.
    Tu devrais pouvoir aussi faire ce que tu veux avec pthread_cond_wait()

  6. #6
    Membre averti
    Inscrit en
    Août 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 28
    Par défaut
    Merci pour vos réponses mais je connais bien la fonction pthread_cond_wait(). C'est une fonction bloquante qui me permet d'attendre une condition unique qui serait envoyée par un autre thread.

    Mon problème est que j'aimerais me mettre en attente de plusieurs evenements et que ma tâche réagisse dès que l'un de ces évenements se produit.

    Concernant les tubes, je ne suis pas spécialiste non plus je vais me renseigner.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 38
    Par défaut
    Dans ce cas, crée une zone de mémoire partagée entre le thread signalant l'évenement et le thread qui attend l'évenement. Ainsi, avant de déclencher l'évenement, tu décris l'évenement dans cette zone mémoire, ensuite tu lance un signal avec pthread_cond_signal() ensuite le thread qui attend se réveille et lit la description de l'évenement.
    Si tu utilises cette technique, pense bien à protéger l'accès aux zones critiques de ton programme

Discussions similaires

  1. Gestion des évènements Netscape 7.0
    Par RATHQUEBER dans le forum Autres langages pour le Web
    Réponses: 6
    Dernier message: 19/12/2005, 16h26
  2. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 10h07
  3. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 13h21
  4. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04
  5. Gestion d'événements hors tables
    Par Quentin dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 00h09

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