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

Boost C++ Discussion :

Problème thread en release


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Problème thread en release
    Bonjour à tous,

    J'initialise mon application de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::thread myThread(boost::bind(&MyClass::MyFunction, this, param1, param2));
    En debug, pas de problème, mais en release, je me retrouve avec une erreur ici, dans boost\thread\detail\thread.hpp :
    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
            template<typename F>
            class thread_data:
                public detail::thread_data_base
            {
            public:
    #ifndef BOOST_NO_RVALUE_REFERENCES
                thread_data(F&& f_):
                    f(static_cast<F&&>(f_))
                {}
                thread_data(F& f_):
                    f(f_)
                {}
    #else
                thread_data(F f_):
                    f(f_)
                {}
                thread_data(detail::thread_move_t<F> f_):
                    f(f_)
                {}
    #endif            
                void run()
                {
                    f(); <-- ici
                }
            private:
                F f;
    
                void operator=(thread_data&);
                thread_data(thread_data&);
            };
    Et le "this" est à nul

    Etant en release, il est difficile de savoir ce qui se passe en interne..

    En débug, je suis en /MDd et en release /MD

    Quelqu'un pourrait-il m'aider ?

    Merci beaucoup,
    A bientôt

  2. #2
    screetch
    Invité(e)
    Par défaut
    si tu dis en release je suppose que tu travailles sous visual studio? dans ce cas tu peuc essayer dans les options de projet de desactiver les optimisations (juste ca) pour avoir des infos de debug correctes. lorsque tu auras corrige le probleme tu pourras remettre comme c'etait

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Bonjour,

    Merci pour cette réponse.

    J'ai désactivé les optimisations et là, le pointeur ne change plus de valeur au fur et à mesure des différents pas à pas.

    En revanche, ça plante toujours.

    J'ai simplifié le code et il se trouve que ça plante lorsque j'appelle une méthode de la classe de base.. Pour être clair, voici la configuration de mon projet :

    App.exe utilise une DLL1
    Cette DLL1 possède une classe C1 qui hérite d'une autre classe C2 de DLL2

    Ça plante lorsque dans C1::Method1() j'appelle C2::Method2(), comme si à l'exécution C1 ne pouvait être casté en C2 durant l'appelle..

    En fait, ça n'a rien à voir avec les threads..

    Je continue de chercher mais auriez vous des pistes ?

    Merci beaucoup,
    A bientôt

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Quelle est la signature de la méthode ?
    Les deux DLL ont-elles été compilées avec exactement les mêmes versions de compilateur (donc avec les mêmes CRT).
    Si tu ne sais pas trop tu peux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep -s -H -o -a -E ' name="Microsoft.VC80.CRT" version="([^"]*")' *.dll
    (en remplaçant VC80 par VC90 ou VC100 au besoin)
    Si tu vois apparaître plusieurs versions, c'est moche !

    MAT.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Voilà j'ai trouvé,

    En fait, quand j'appelais C2::Method2 dans la DLL2 depuis la DLL1, j'ai vue dans la fenêtre de sortie que le programme chargeait les DLLs dépendantes..

    L'une d'entre elle plantait au chargement et j'ai compris que c'était parce que je n'avais pas positionné une variable de pré processeur (_WINDOWS il me semble), alors qu'en Debug elle y était..

    grrrr 3 jours de perdu :'(

    Merci quand même

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

Discussions similaires

  1. [Problème] Threads et JProgressBar
    Par Bloodscalp dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 10/10/2006, 15h19
  2. Problème thread et fonction récursive
    Par cryptorchild dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2006, 12h19
  3. Problème thread Boost
    Par TuRn3r dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 01/06/2006, 18h34
  4. Problème Thread et Scan de dossiers en C
    Par tptiben dans le forum Windows
    Réponses: 8
    Dernier message: 15/05/2006, 18h25
  5. Problème Thread
    Par Royd938 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 07/04/2006, 09h10

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