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

MFC Discussion :

[MFC] Thread terminé brutalement


Sujet :

MFC

  1. #1
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut [MFC] Thread terminé brutalement
    Bonjour

    Je developpe une appli avec vc++ 6, en me servant des MFC notament pour créer des threads. Mon souci est que l'appli est brutalement quitté à des moment aléatoires (de mon point de vue), et ce meme en mode débug qui ne me fournit aucune info, la seule info qu'il me donne c'est que les threads du programme ont terminé avec le code 0, et parfois le code 3.

    Si vous avez la moindre piste, parlez m'en!
    Merci
    Qui dit buzz??!!!!

  2. #2
    mat.M
    Invité(e)
    Par défaut Re: [MFC] Thread terminé brutalement
    Citation Envoyé par OjBarbare
    Bonjour

    Je developpe une appli avec vc++ 6, en me servant des MFC notament pour créer des threads. Mon souci est que l'appli est brutalement quitté à des moment aléatoires (de mon point de vue), et ce meme en mode débug qui ne me fournit aucune info, la seule info qu'il me donne c'est que les threads du programme ont terminé avec le code 0, et parfois le code 3.

    Si vous avez la moindre piste, parlez m'en!
    Merci
    Nous non plus on ne peut pas avoir plus de pistes!
    Sans code difficile à dire.
    Le mieux est d'utiliser la macro TRACE des MFC qui permet de faire un diagnostic

  3. #3
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    le code est basique en ce qui concerne la création du thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfxBeginThread((AFX_THREADPROC)reception,GetSafeHwnd()
    tu peux m'en dire un peu plus sur TRACE steuplé
    merci

    ps : javai trouvé ya qq temps un pti tuto sur le debuggeur VC, avec la signification de certaines valeur type.... je ne trouve plus... si qq'un voit de quoi je parle, ce serait cool de me dire ou ça se trouve
    [edit] je lai retrouvé, pour ceux que ça interresse : ftp://ftp-developpez.com/farscape/tutoriels/demarrer-mfc-vc6.pdf
    Qui dit buzz??!!!!

  4. #4
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    visiblement personne n'est inspiré...
    qq'un connnaitrait-il la signification des code de sortis? je suppose que 0 est la terminaison "normal" du thread... mais pour le reste???
    Qui dit buzz??!!!!

  5. #5
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Pour les autres codes va dans l'aide de l'API windows.

    As-tu essayé de faire tourner ton appli en "stubbant" le thread?

    As-tu essayé en pas à pas pour voir l'état de la pile d'appel?

    Un _try..._except dans ton thread voir le coeur de l'appli t'aidera peut-être à comprendre.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 567
    Points
    41 567
    Par défaut
    Es-tu sûr que ta procédure de thread possède le bon en-tête ?

    Quand il y a un cast, c'est généralement que ce n'est pas le cas...
    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.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Salut!
    Pourquoi ne pas détecter la fin de ton appli, et fermer tes threads manuellement à ce moment là?

  8. #8
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Caine
    As-tu essayé de faire tourner ton appli en "stubbant" le thread?
    As-tu essayé en pas à pas pour voir l'état de la pile d'appel?
    je ne connais pa la technique du "stubb"...
    Pour ce qui est du pas à pas, mes thread etant plutot du genre conséquent, et le probleme survenant aléatoirement je pense que jaurai du mal à détecter qqchose (l'appli tourne défois 2h sans planter...), mais jvè essayer qd meme

    Pour ce qui est du cast, ma fonction est bien de type (AFX_THREADPROC) , mais si je ne le met pas, voila le msg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (__cdecl *(__cdecl *)(void *))(void *)'
    Citation Envoyé par ienien
    Pourquoi ne pas détecter la fin de ton appli, et fermer tes threads manuellement à ce moment là?
    Le souci c'est que tous mes threads sont fermés sans que je le veuille... j'avais penser mettre une boite de dialogue demandant si on veut effectivement fermer, mai meme si ça marche ça ne peut pas etre une solution durable...
    Qui dit buzz??!!!!

  9. #9
    mat.M
    Invité(e)
    Par défaut
    La Macro TRACE permet dans la fenêtre de déboguage de VC++ d'afficher en exécution des CString comportant des messages.
    Donc lors de l'appel de AfxBeginThread, tu peux placer un TRACE pour avoir l'état des variables locales .

    Le souci c'est que tous mes threads sont fermés sans que je le veuille... j'avais penser mettre une boite de dialogue demandant si on veut effectivement fermer, mai meme si ça marche ça ne peut pas etre une solution durable...

    :
    C;est que le Thread se déroule correctement.
    Un Thread c'est un mini programme en parallèle.

  10. #10
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par mat.M
    C;est que le Thread se déroule correctement.
    justement, d'ou mon probleme... il ne devrait pa se fermer... ou tout du moins, meme si un thread que jai créé se ferme, il ne devrait pas entrainer la fin de toute l'appli...
    Qui dit buzz??!!!!

  11. #11
    Futur Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Peux-tu déposer sur le forum un minimum de code pour que l'on puisse comprendre ce qui se passe...
    D'après ce que tu écris, je pense qu'il y a bug sous roche qui fait planter ton appli, et donc tes threads.
    As-tu des variables auxquelles accèdent tes threads et qui "débordent"?
    Gères-tu l'accès par plusieurs threads à une même variable?
    Courage...

  12. #12
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    jaimerai bien, mai le code est vraiment grand... et chaque thread accede a differents fichiers.... (en fait je ne crée qu'un seul thread qui tourne en permanence)
    pour ce qui est des débordement de variable, je pense que le debuggeur les reconnaitrait avant de fermer l'appli...
    Le thread que je crée accede bien a une variable partagée, mais seulement en lecture (et appel de fct), donc a priori pas de section critique

    a force de fouiller jvè ptete trouver!
    Qui dit buzz??!!!!

  13. #13
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Les débrodements de variable sont vérifier si l'otpion est activée dans les options de projets.

    Vérifie aussi que le projet s'arrète sur toutes les exceptions.

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 567
    Points
    41 567
    Par défaut
    Citation Envoyé par OjBarbare
    Pour ce qui est du cast, ma fonction est bien de type (AFX_THREADPROC) , mais si je ne le met pas, voila le msg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (__cdecl *(__cdecl *)(void *))(void *)'
    Dis-moi, tu n'aurais pas par hasard fait la c***erie suivante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AFX_THREADPROC reception(void *);
    Si c'est le cas, tu nous as déclaré une fonction RETOURNANT une AFX_THREADPROC. (Ta fonction se retrouve du type 'unsigned int (__cdecl *(__cdecl *)(void *))(void *)' qui ne correspond PAS à une AFX_THREADPROC)

    Tu dois déclarer ta fontion ainsi:
    Citation Envoyé par MSDN : AfxBeginThread()
    UINT MyControllingFunction( LPVOID pParam );
    Là, ta fonction sera bien du type 'unsigned int (__cdecl *)(void *)' qui correspond bien au type AFX_THREADPROC.
    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.

  15. #15
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Sans vouloir pinailler, il y a erreur dans ton quote, ce n'est pas moi qui ai écris ça

  16. #16
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    mes threads sont déclarés comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AFX_THREADPROC reception(LPVOID lpParam);
    jai fait la moitié de la connerie... vè changer ça de ce pas

    ps : je trouve pas ou config le projet pour gerer les débordements de mem... c'est bien dans "Project Settings"?
    Qui dit buzz??!!!!

  17. #17
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Autant pour moi, j'ai confondu avec Delphi. Je ne suis pas sûr que ça existe avec VC

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 567
    Points
    41 567
    Par défaut
    Caine : Corrigé.

    OjBarbare: En fait, tu a fait toute la connerie : Il n'y a pas d'autre moitié.
    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
    Membre régulier
    Inscrit en
    Février 2003
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 141
    Points : 95
    Points
    95
    Par défaut
    ok lol
    mais tu penses que ça pourrai venir de là???
    Qui dit buzz??!!!!

  20. #20
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Je prends un peu le sujet en route, apparemment tu utilises des fichiers ou autres ressources dans tes threads tu traites les exceptions d'erreurs ?
    quels types d’apis tu utilises pour la gestion des fichiers : le c , les stl , ou avec les MFC ?
    si tu lances ton programme en debug ça plante ?
    si ça sort du programme de la même manière tu as regardé dans la fenêtre du debug trace si il n'y avait pas de notification d'erreurs ?


Discussions similaires

  1. [MFC] Thread et timer
    Par r0d dans le forum MFC
    Réponses: 2
    Dernier message: 18/04/2005, 13h03
  2. Réponses: 18
    Dernier message: 13/04/2005, 15h46
  3. [MFC] Thread
    Par romeo9423 dans le forum MFC
    Réponses: 2
    Dernier message: 25/03/2005, 14h20
  4. [MFC] Thread & memory leaks
    Par Racailloux dans le forum MFC
    Réponses: 7
    Dernier message: 15/03/2005, 12h44
  5. Réponses: 3
    Dernier message: 11/02/2004, 12h50

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