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

Langage C++ Discussion :

Durée de vie d'une lambda


Sujet :

Langage C++

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut Durée de vie d'une lambda
    Bonjour à tous,

    j'ai besoin de faire un callback sur l'appel d'un thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class A 
    {
        void exec()
        {
            Mt myThread;
            myThread.run(callback);
        }
    }
    Sachant que le run du thread peut être long et que la class "A" ne vie que le temps d'appeler exec().
    - Est ce que utiliser une lambda pour le callback survivra la destruction de A (elle est complètement autonome) ?
    - Vaut il mieux utiliser une fonction statique ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Soit ton problème est pas clair, soit tu sais pas exactement ce que tu fais, mais les informations que tu donnes ne me semblent pas cohérentes.

    Si exec est un membre, tu as forcément un A pour l'appeler.
    Tu peux donc très bien avoir la callback membre de A.
    Mt ne détruit pas le thread à la fin de son scope ? Si oui, et c'est ce que je pense, ton thread ne peut pas survivre à la destruction de A. Ou plutôt, A sera détruit uniquement après l'appel à exec et l'exécution de run.
    Ou alors tu as un appel à detach caché ?

    Une lambda c'est une variable, ça n'a ni plus ni moins que sa propre durée de vie.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Mt ne détruit pas le thread à la fin de son scope ?
    N'est-ce pas 1 problème synchrone contre asynchrone

    Il y a la notion de "worker thread", tu le lances juste pour qu'il fasse son travail, pas besoin de l'attendre qu'il finisse.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Oui , je n'ai pas précisé que effectivement le thread est détaché et que donc au moment de l'appel du callback je n'ai pas la garantie d'avoir une instance de "A".

    De ce que j'ai compris du fonctionnement interne des lambda ca semble pouvoir convenir puisque a priori ca revient à faire une instance d'une classe dédiée.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Les paramètres passés au thread sont copiés dans l'espace du thread, donc la copie de la lambda est garantie valide pendant toute la durée du thread. Attention si la lambda a reçu des paramètres par référence, il n'y a aucune garantie intrinsèque que ces paramètres seront toujours là pendant toute la durée du thread.

  6. #6
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Une lambda en c++ ce n'est rien de plus qu'un foncteur mais avec du sucre syntaxique. Donc la logique a appliquer n'est pas différente que l'instance d'un objet

  7. #7
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Bonjour,

    Les paramètres passés au thread sont copiés dans l'espace du thread, donc la copie de la lambda est garantie valide pendant toute la durée du thread. Attention si la lambda a reçu des paramètres par référence, il n'y a aucune garantie intrinsèque que ces paramètres seront toujours là pendant toute la durée du thread.
    [Mode chipotage]
    Ils sont moved plutôt ?

    https://en.cppreference.com/w/cpp/thread/thread/thread

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Durée de vie d'une session
    Par khokho dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 28/06/2006, 21h31
  2. durée de vie d'une instruction
    Par poporiding dans le forum C++
    Réponses: 6
    Dernier message: 08/06/2006, 16h11
  3. Réponses: 3
    Dernier message: 27/04/2006, 11h37
  4. Durée de vie d'une session
    Par dbass dans le forum Langage
    Réponses: 8
    Dernier message: 21/03/2006, 19h38
  5. [AS2] durée de vie d'une classe (extends movieclip)
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 23/07/2005, 13h33

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