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 :

Probleme avec les threads


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut Probleme avec les threads
    bonjour à tous, je suis nouveau sur le forum et me permet de venir chercher une aide.

    je développe sous VC++ 6.0 et je galere à fond avec les threads Je vous explique mon probleme.

    Je travaille sur une application qui doit retracer à l'écran le mouvement d'un objet. Ce mouvement est défini par un suite séquentielle de points que je stocke dans un tableau.

    Ma fenetre principal possede une variable de type entier (m_ID) qui correspond à l'identifant du point courant.
    Je voudrais que lorsque j'appuie sur un bouton, un thread se lance et aille me tracer tous mes points. (je veux utiliser un thread sinon je perd la main sur l'application tant que tout n'est pas tracé ! )

    En gros l'algo du thread est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      tant que m_ID < max
      {
         m_ID++
         Mise a jour de l'affichage
         Temporisation.
      }
    sur clic du bouton j'ai mis appelé AfxBeginThread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AfxBeginThread(ThreadLecture,this)
    Et voici ma fonction ThreadLecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UINT NomFenetre::ThreadLecture(LPVOID pParam)
    {
       NomFenetre* prThis = reinterpret_cast<NomFenetre*>(pPram)
       while(prThis->m_ID < prThis->m_IDmax)
       {
         prThis->m_ID++;
         prThis->majgraphique; //majgraphique appelle reellement invalide rect pour mettre a jour plusieurs zones)
         sleep(200);
       }
       return 0;
    }
    Quand je compile ca passe mais a l'execution j'ai une erreur. Visiblement il me demande de passer par un handle sur la fenetre.
    Or quand je passe par un handle via FromHandle, c'est un handle générique (type CWnd) et non du type de ma fenetre et je n'ai donc plus acces a mes variables (m_ID).

    Auriez vous une idée ?

    Merci d'avance pour votre aide.


    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  2. #2
    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
    Par défaut
    salut,
    probleme classique : pas de gui dans un thread de travail.
    voir faq:
    http://c.developpez.com/faq/vc/?page...d#WorkerThread

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut
    Merci pour l'info.

    Par contre je ne vois pas comment dans le thread tu peux interragir sur les données membres de la fenetre (dans mon cas la variable m_ID).

    Parce que je dois utiliser une boucle donc l'execution dépend de la valeur de cette variable.
    Sans compter que le thread doit lui aussi modifier cette valeur.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut
    OK. Je viens de tilter comment ça marche.

    Il y avait un truc que je ne maitrisais pas , c'était l'envoi de messages privés que l'on peut trouver ici :

    http://c.developpez.com/faq/vc/?page...PrivateMessage

    J'ai essayé avec l'exemple fournit dans la FAQ et cela fonctionne. La MessageBox apparait bien.

    Par contre j'ai un autre problème :
    J'utilise un boucle qui doit mettre a jour mon ID et ensuite mettre a jour l'affichage.
    Le probleme, c'est qu'il ne m'affiche rien et le programme est bloqué tant que ma boucle n'est pas terminée...
    Or je voudrais continuer à pouvoir utiliser mon programme en même temps que mon dessin évolue (que ma boucle évolue).
    Est ce possible et si oui, pouvez vous me donner la méthode, parce que la je sèche...

  5. #5
    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
    Par défaut
    salut ,
    a quel endroit se fait cette boucle ? dans le thread ?
    le probleme de base c'est tout traitement qui ne redonne pas la main a l'application (genre boucle citée) empeche celle çi de recevoir les messages windows et donc de raffraichir les interfaces:
    voir faq:
    http://c.developpez.com/faq/vc/?page...rk#PumpMessage

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Par défaut
    Quelle rapidité de réponse !!!!

    Merci Farscape, justement je venais de tomber dessus dans la FAQ et je viens de tester et ca marche nickel...

    Tu peux pas savoir à quel point ca m'enlève une épine du pied !
    Merci beaucoup pour ton aide !!

    Décidément tu touche à mort sous visual C++ !!

    Pour moi le sujet est résolu.

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

Discussions similaires

  1. probleme avec les threads et class
    Par cosmoff dans le forum Général Python
    Réponses: 1
    Dernier message: 25/05/2015, 14h32
  2. probleme avec les thread
    Par ashurah dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 26/03/2010, 14h05
  3. Probleme avec les Threads
    Par ouxss dans le forum C++
    Réponses: 2
    Dernier message: 05/01/2010, 10h27
  4. Probleme avec les threads
    Par Loenix dans le forum Général Python
    Réponses: 4
    Dernier message: 04/06/2009, 14h50
  5. Probleme avec les thread
    Par jonny dans le forum MFC
    Réponses: 11
    Dernier message: 01/06/2006, 17h37

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