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 :

Mettre en pause l'execution d'une fonction en attendant l'execution d'une autre ?


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut Mettre en pause l'execution d'une fonction en attendant l'execution d'une autre ?
    Bonjour,

    J'ai une fonction A qui fait appel à une fonction d'une librairie externe,et quand le calcul des paramètres est finit, la librairie externe appelle une fonction B avec le résultat.
    Problème: je ne dois pas quitter la fonction A avant d'avoir eu le résultat de B. Comment mettre l'execution de A en pause pendant ce temps, et comment savoir que B a finit ?

    Merci !

  2. #2
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    C'est pas clair du tout Tu devrais poster un peu de code, même très simplifié.

    A 1ere vue, peut-être que les threads seraient la solution, mais ce n'est pas du tout sûr, n'ayant pas plus de détails ...

  3. #3
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Avec un pipe ça doit se faire non? Ou alors pas compris ce que tu veux faire.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FonctionA(param1,param2)
    {
    FonctionLibrairieExterne(param3);
     
    //Ensuite, j'attend que FonctionB soit appelé par la librairie externe
    //Et je récupère le résultat de la fonction B.. probablement par une variable globale ?
     
    return ResultatFonctionB;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FonctionB(param4,param5)
    {
    //je viens de récuperer le résultat de la librairie externe
    //maintenant il faudrait notifier FonctionA que j'ai ce résultat, et qu'il peut aller le récuperer
    }

  5. #5
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Les variables globales sont à proscrire en général. Je suppose que tu ne peux pas modifier FonctionLibrairieExterne() et ainsi retourner le retour de FonctionB().

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Oui j'aimerai bien me passer de variables globales, mais je ne suis pas sur d'avoir le choix ici, et effectivement FonctionLibrairieExterne() n'est pas modifiable et n'a pas de valeur de retour.

  7. #7
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Ce que tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    FonctionA(param1,param2)
    {
    créer evenement (probablement une variable globale ou membre de la classe)
     
    FonctionLibrairieExterne(param3);
     
    attendre evenement (attendre que la fonction de callback signale l'evenement)
     
    //Ensuite, j'attend que FonctionB soit appelé par la librairie externe
    //Et je récupère le résultat de la fonction B.. probablement par une variable globale ?
     
    return ResultatFonctionB;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    FonctionB(param4,param5)
    {
    //je viens de récuperer le résultat de la librairie externe
    //maintenant il faudrait notifier FonctionA que j'ai ce résultat, et qu'il peut aller le récuperer
     
    positionner evenement (pour indiquer à l'autre fonction qu'elle peut redémarrer)
     
    }
    Je te l'ai fait en pseudo code.

    Maintenant, c'est à toi de créer et de gérer ton événement. Il doit y avoir des trucs dans boost pour cela. Sous Microsoft, j'utiliserais un Event Object pour faire cela. Pour Linux, pas d'idée.
    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
    .

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Merci !

  9. #9
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Il doit y avoir des trucs dans boost pour cela
    Ouais, ici
    Sous linux, c'est typiquement wait ou équivalent. Mais pour s'affranchir des différents Os, je conseille boost.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/01/2010, 14h48
  2. Réponses: 7
    Dernier message: 10/11/2006, 09h03
  3. Réponses: 4
    Dernier message: 07/11/2006, 11h28
  4. Réponses: 3
    Dernier message: 17/08/2006, 14h43
  5. Une fonction settimeout qui s'execute pas
    Par stepon dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 11h55

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