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 :

Savoir la fin d'execution d'une fonction asynchrone


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Savoir la fin d'execution d'une fonction asynchrone
    Bonjour a tous,

    Comme explique dans le titre de ce post, je cherche a trouver une maniere de connaitre la fin d'execution d'une methode asynchrone.
    Ce dans le cadre d'une application de visioconference dans laquelle des parametres peuvent etre modifies, et je voudrais recreer une connection qu'une fois ces parametres reelement pris en compte.

    Par avance, merci de vos reponses !

    Greg

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    La réponse est difficile avec si peu d'éléments. Tu peux avoir des mécanismes de signalisation :
    -> Par callback à la fin de ta méthode asynchrone
    -> Par message/boîte aux lettres (type SendMessage)
    -> Par signalisation (boost.signal)
    -> Par évènement
    ...
    Tout dépend de ton contexte.

  3. #3
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    On peut aussi poller.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    3DArchi, quand tu parles de callback c'est return ? peux-tu m'eclairer stp.

    Et que veut dire poller ?

    Greg

  5. #5
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    callback, c'est une fonction que l'appelé rappelle lorsqu'il a fini son traitement.

    poller, c'est faire des requêtes régulièrent pour savoir où en est le traitement. Sauf s'il n'y a pas le choix, c'est mal.

    Comme je ne comprends pas trop dans quel contexte tu es (synchronisation de threads, de process ou synchronisation client/serveur ?), je ne peux pas trop t'en dire plus.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 67
    Points : 42
    Points
    42
    Par défaut
    En fait je travaille sur des communications avec le protocole H323. Je veux en fait "detruire" ma connection et la redemarrer juste apres, sauf que la methode qui detruit la connection est asynchrone. Voila donc le contexte.

    Peux tu m'expliquer plus en detail le fonctionnement de callback stp.

    Greg

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    salut,
    travailles-tu dans des threads ?
    Si oui que font tes threads ? Sont-ils bloqués sur qqchose, ou bouclent-ils sur qqchose ?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par winnyzeboss1 Voir le message
    En fait je travaille sur des communications avec le protocole H323. Je veux en fait "detruire" ma connection et la redemarrer juste apres, sauf que la methode qui detruit la connection est asynchrone. Voila donc le contexte.

    Peux tu m'expliquer plus en detail le fonctionnement de callback stp.

    Greg
    Le principe d'une callback est de fournir à ta méthode un objet ou une fonction qui sera appelée à la fin de l'exécution.
    Avec un foncteur :
    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
     
    template<class CallBack>
    void MaMethodeQuiDureQuiDureQuiDure(/* parametres*/, CallBack cb_)
    {
    // mes traitements 
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    cb_();
    }
     
    struct FMaCallBack
    {
       void operator()()
       {
         // traitement à faire lorsque c'est fini !
       }
    };
     
    // Appel :
    MaMethodeQuiDureQuiDureQuiDure(/*...*/,FMaCallBack());
    Avec un pointeur de fonction (à la volée, donc peut être que à corriger) :
    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
     
    void MaMethodeQuiDureQuiDureQuiDure(/* parametres*/, void (*cb_)())
    {
    // mes traitements 
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    // qui dure
    cb_();
    }
     
    void FMaCallBack()
    {
         // traitement à faire lorsque c'est fini !
    };
     
    // Appel :
    MaMethodeQuiDureQuiDureQuiDure(/*...*/,FMaCallBack);
    La première version a l'avantage d'être plus générique.

    Dans les deux cas, si tu es en multi-thread, cette callback est appelée dans le même thread que ton traitement. Sinon, il faut un peu plus de détails sur ton architecture.

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    En fait je travaille sur des communications avec le protocole H323. Je veux en fait "detruire" ma connection et la redemarrer juste apres, sauf que la methode qui detruit la connection est asynchrone. Voila donc le contexte.
    Je suppose que tu te bases sur une librairie externe pour gérer la connexion H323.

    Donc, c'est cette librairie qui doit te fournir un moyen de savoir quand la connexion est détruite. Sans cette information, tout ce qu'on pourra te dire, ce sont des généralités pas forcéments applicables.

    PS : connection est un horrible anglicisme, c'est connexion en français

  10. #10
    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
    Points : 4 625
    Points
    4 625
    Par défaut
    Regarde du côté de Boost.Asio, qui est un framework pour la gestion de l'asynchrone, en particulier pour les échanges réseau.

Discussions similaires

  1. [Prototype] Exécution d'une fonction à la fin du chargement de la page
    Par Herman dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 30/12/2008, 16h41
  2. Attendre la fin de l'execution d'une fonction
    Par metalcoyote dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 05/12/2008, 14h27
  3. Forcer la fin de l'execution d'une fonction
    Par Valkirion dans le forum C++
    Réponses: 7
    Dernier message: 10/08/2007, 14h32
  4. Attendre la fin de l'execution d'une fonction
    Par Invité dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2007, 10h33
  5. Execution d'une fonction lors de l'appui sur CTRL+ALT+I
    Par cyberlewis dans le forum Windows
    Réponses: 4
    Dernier message: 17/03/2004, 01h35

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