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 :

Lancement et réception de messages C++ pur (portage)


Sujet :

C++

  1. #1
    doccpu
    Invité(e)
    Par défaut Lancement et réception de messages C++ pur (portage)
    Bonjour,

    Coment puis-je lancer et récuperer des message en langage C++ ?

    J'ai un de mes code C++ qui lance des exceptions (throw) et je voudrais transformer certains de ces throw en messages (évenement) comment puis-je faire ?

    Le code doit être portable sous windows et linux. Existe-t'il une interface comune à ces 2 environements pour envoyer un message? Si oui quelle est la logique d'utilisation et quelles sont les classes utilisés ?

    En fait je cherche à utiliser un mécanisme genre delegate de C# en C++. Y à t'il un mécanisme similaire ?

    Merci d'avance.

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Ces messages sont à destination de qui? Si c'est pour de gestion de signaux internes à ton programme, sigc++ ou Boost.Signals peuvent convenir?

  3. #3
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Citation Envoyé par doccpu
    En fait je cherche à utiliser un mécanisme genre delegate de C# en C++. Y à t'il un mécanisme similaire ?
    Pointeur de fonction ?
    Objet fonctionnel (functor?)

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Citation Envoyé par Hylvenir
    Pointeur de fonction ?
    Objet fonctionnel (functor?)
    boost::signal utilise un mécanisme à base de foncteurs pour gérer les évènements.
    Tout ça c'est si tu restes dans le même processus (et le même thread tant qu'on y est), si tu veux de la communication interprocessus portable je ne vois que les commu réseau pour pas se casser la tête.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Il n'existe pas de terme "message" en C++ pur, aussi commence par définir ce que tu appelles "message" : Une entrée dans un log ? Un message Windows ? Un message affiché pour que l'utilisateur le lise ?
    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.

  6. #6
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par IrmatDen
    Salut,

    Ces messages sont à destination de qui? Si c'est pour de gestion de signaux internes à ton programme, sigc++ ou Boost.Signals peuvent convenir?
    En fait c'est une lib et je voudais envoyer un mesage à un destinataire(appli, objet.... Par exemple comme avec Qt sauf que j'y ai pas droit).

    Je ne peux utiliser que du C++ et éventuellement la lib standard, pas de lib exotique.

    Citation Envoyé par Hylvenir
    Pointeur de fonction ?
    Objet fonctionnel (functor?)
    Les pointeurs de fonctions m'interessent mais je n'arrive pas à comprendre l'architecture qu'il faudrais que je mette en place ou le mécanisme qu'il faut que j'implémente. (je sait faire un pointeur sur fonctions )

    Mais cela m'etonne qu'il n'y ai pas une lib standard de C++ qui traite les évenements je croyais que le C++ était un langage objet et que les objets devais pouvoir communiquer entre les threads.

    Le principe est :
    -J'ai une lib C++ pur(pas d'autres lib autorisés).
    -J'ai des methodes qui doivent dire à l'appli principale qu'elles on finit certains travaux mais elles doivent pouvoir continuer à travailler(signaux, évenements, autre...).
    -J'ai la possibilité d'avoir un pointeur sur le destinataire.
    itation est non définit (doit etre compatible windows et linux)
    -J'ai droit à utiliser les mécanismes du système d'exploitation (et ça m'arrangerais si c'est possible)
    la lib doit pouvoir etre incluse dans un thread donc pas de variables a acces direct sans controles.

    voila ! Des idées?

  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
    Mais cela m'etonne qu'il n'y ai pas une lib standard de C++ qui traite les évenements je croyais que le C++ était un langage objet et que les objets devais pouvoir communiquer entre les threads.
    Le C++ standard n'a aucune notion de thread.

    Les delegates c'est globalement la même chose que les pointeurs de fonction.
    Les foncteurs permettent de rajouter de l'état à ces fonctions.

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    S'interdire l'utilisation d'une bilbiothèque non standard n'est pas le meilleur choix quand on veut faire du multithreading. Surtout dans un langage qui ne sait pas ce que c'est.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par loufoque
    ... Les foncteurs permettent de rajouter de l'état à ces fonctions.
    developpe sur les foncteur et les messages ? (je connait pas bien la std)

  10. #10
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Luc Hermitte
    S'interdire l'utilisation d'une bilbiothèque non standard n'est pas le meilleur choix quand on veut faire du multithreading. Surtout dans un langage qui ne sait pas ce que c'est.
    ouai mais si j'avais le choix je développerais en Qt et je viendrais pas vous casser les bonbon

    La lib ne manipule pas dirrectement les threads mais elle doit etre threadsafe car des threads doivent pouvoir l'utiliser en toute sécurité.

    Et surtout ca fait bizare quand je fais un throw pour envoyer que j'ai fini de lire une partie d'un fichier et que je doit en lire une autre dans la foulée sur le meme fichier.

  11. #11
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    C'est pour faire un système de notification, c'est ça ?

  12. #12
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Patriarch24
    C'est pour faire un système de notification, c'est ça ?
    yes ! mais le problème c'est que ça part d'une lib et sa (doit) arrive(r) dans une apli qui peut s'enregistrer dans un service genre delegate par exemple mais qui n'a aucun moyen de savoir d'elle même qu'une "notification" est arrivé. C'est pour ca que j'ai pensé au pointeur de fonctions mais la c'est l'architecture du système qui vas gérer ça m'échape un peu.

  13. #13
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Citation Envoyé par doccpu
    Et surtout ca fait bizare quand je fais un throw pour envoyer que j'ai fini de lire une partie d'un fichier et que je doit en lire une autre dans la foulée sur le meme fichier.
    Définitivement un très mauvais design que d'utiliser les exceptions pour notifier autre chose que des erreurs.
    Accessoirement, cela me surprend un peu que tu puisses balancer des exceptions au travers de threads.

    Pour ton truc, tu vas devoir utiliser des futures, des queues de messages (comme p.ex. celles de ACE inspirées de ce qui est fait dans "System V STREAMs"), ...
    Dans tous les cas tu vas devoir utiliser une bibliothèque non standard. Quelle soit propriétaire ou portable, peu importe il est impossible de faire autrement : je l'ai dit, le C++ ne sait pas ce qu'est un thread.
    Maintenant, à toi de nous dire sous quel système ton programme tournera, ou quelle bibliothèque portable tu pourrais employer.

    Oups. Je viens de relire ton premier message.

    J'imagine que "tu ne peux pas" n'est pas une réponse qui te convient...
    Pourtant, à moins de voulor perdre beaucoup de temps (et donc de l'argent), il va falloir envisager de s'ouvrir un minimum.



    Reprenons les besoins:
    Les notifications restent locales à une application, à une machine, ou bien elles peuvent voyager sur un réseau (éventuellement hétérogène) ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  14. #14
    Membre expérimenté
    Avatar de David Fleury
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 253
    Par défaut
    Peut être en envoyant par socket des messages SNMP ?
    Comme pour faire de la surveillance.

    ah oui.. sans aucune lib... ça va pas être facile je crois.

  15. #15
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Luc Hermitte
    Définitivement un très mauvais design que d'utiliser les exceptions pour notifier autre chose que des erreurs.
    Nous sommes d'accord
    Citation Envoyé par Luc Hermitte
    Accessoirement, cela me surprend un peu que tu puisses balancer des exceptions au travers de threads.
    Que se soit clair, La lib ne manipule pas de threads, mais ses objets peuvent (et seront) encapsulé dans des threads.

    Citation Envoyé par Luc Hermitte
    Pour ton truc, tu vas devoir utiliser des futures, des queues de messages (comme p.ex. celles de ACE inspirées de ce qui est fait dans "System V STREAMs"), ...
    Dans tous les cas tu vas devoir utiliser une bibliothèque non standard. Quelle soit propriétaire ou portable, peu importe il est impossible de faire autrement : je l'ai dit, le C++ ne sait pas ce qu'est un thread.
    je te rassure ma lib non plus
    Citation Envoyé par Luc Hermitte
    J'imagine que "tu ne peux pas" n'est pas une réponse qui te convient...
    Pourtant, à moins de voulor perdre beaucoup de temps (et donc de l'argent), il va falloir envisager de s'ouvrir un minimum.

    Reprenons les besoins:
    Les notifications restent locales à une application, à une machine, ou bien elles peuvent voyager sur un réseau (éventuellement hétérogène) ?
    J'ai 1 mois mais c'est pas le plus important je souhaite surtout comprendre comment je peux créer un message en dirrection de la pompe d'une apli que je ne connait pas.

    La solution d'une collection de pointeurs de methode m'interesse beaucoup car ça me parait simple et éfficace mais ce que j'ai du mal à comprendre c'est comment je peux faire pour déclencher les methode enregistrés de manière asynchrone. C'est a dire sans bloquer mon traitement.

    La situation au niveau des interdictions a changé je peux utiliser Qt mais si c'est possible je souhaiterais réinventer la roue

  16. #16
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    comment je peux créer un message en dirrection de la pompe d'une apli que je ne connait pas.
    Il faut créer toi même la pompe et les files qui vont avec ; pour rendre la lib thread safe, if faut utiliser un outil interne à la lib (des mutex) pour synchroniser les accès aux objets.
    Si tu veux faire transiter des données par le réseau, tu n'as pas le choix, il faudra utiliser des libs "exotiques".


    La solution d'une collection de pointeurs de methode m'interesse beaucoup car ça me parait simple et éfficace mais ce que j'ai du mal à comprendre c'est comment je peux faire pour déclencher les methode enregistrés de manière asynchrone
    Penches toi sur les modèles de conception suivants :
    * observer
    * command
    Il me semble qu'ils sont les plus à même de répondre à tes besoins.

  17. #17
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Patriarch24
    Il faut créer toi même la pompe et les files qui vont avec ; pour rendre la lib thread safe, if faut utiliser un outil interne à la lib (des mutex) pour synchroniser les accès aux objets.
    Pour la pompe t'a de la doc dessus ?

    oki pour les mutex je regarderais si c'est nécéssaire.

    Citation Envoyé par Patriarch24
    Si tu veux faire transiter des données par le réseau, tu n'as pas le choix, il faudra utiliser des libs "exotiques".
    Pas de réseau.

    Citation Envoyé par Patriarch24
    Penches toi sur les modèles de conception suivants :
    * observer
    * command
    Il me semble qu'ils sont les plus à même de répondre à tes besoins.
    je vais voir ca !

  18. #18
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Pour ça, je me demande si la lib doit elle-même gérer l'envoi de messages à une pompe qu'elle ne connait pas.

    Ne serait-il pas mieux dans ce cas d'employer des callbacks (pointeurs de fonction ou classe avec fonctions virtuelles) pour notifier ?
    Ainsi, le programme utilisateur de la bibliothèque ferait ce qu'il veut quand il est invité à rapporter un événement...
    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.

  19. #19
    doccpu
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc
    Pour ça, je me demande si la lib doit elle-même gérer l'envoi de messages à une pompe qu'elle ne connait pas.
    Je sait pas je connait pas trop le mecanisme mais la lib doit envoyer un truc (message) a l'apli avec sufisement de donées pour que l'apli sache ce qu'elle ai a faire.

    Citation Envoyé par Médinoc
    Ne serait-il pas mieux dans ce cas d'employer des callbacks (pointeurs de fonction ou classe avec fonctions virtuelles) pour notifier ?
    Ainsi, le programme utilisateur de la bibliothèque ferait ce qu'il veut quand il est invité à rapporter un événement...
    J'ai pensé à faire une collection de pointeurs fonction mais je sait pas comment lancer ces fonctions de manière asynchrones (tire et continu sans attendre la réponse) un peu comme le font les delegate en C#.

    D'un autre point de vue le modelle observer peut etre interessant mais j'ai pas encore vue de doc claire. Je cherche...

  20. #20
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Ne le fais pas de manière asynchrone.
    Appelle les fonctions de manière synchrone, et ce sont les fonctions en question qui choisiront si elles font un truc synchrone ou un truc asynchrone.
    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.

Discussions similaires

  1. Empêcher la réception de messages
    Par JIEFJIEF dans le forum Outlook
    Réponses: 4
    Dernier message: 12/04/2007, 19h01
  2. Outlook 2007 Réception des messages de réponse
    Par Cecilenze dans le forum Outlook
    Réponses: 1
    Dernier message: 02/04/2007, 09h00
  3. réception des messages dans un chat en tcp
    Par je®ome dans le forum Réseau
    Réponses: 9
    Dernier message: 25/04/2006, 17h48
  4. [DatagramSocket] Pb de réception de messages côté serveur
    Par simsky dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/09/2005, 18h41
  5. réception des messages WM_PAINT
    Par enzoMetz dans le forum Windows
    Réponses: 2
    Dernier message: 19/06/2004, 20h15

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