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 :

Accès à une méthode static depuis un thread


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut Accès à une méthode static depuis un thread
    Bonjour à tous!

    Je sollicite votre aide car je n'arrive pas à me sortir de la situation suivante:
    J'ai une classe de type CDialog qui contient un pointeur static sur elle-même
    Grâce a ce pointeur, j'accède à certains de ses contrôles depuis des méthodes static déclarées dans cette même classe.
    Tout fonctionne très bien lorsque j'appelle ces méthodes de la façon suivante:

    CMaClass::UpdateProgressBarPos(20)

    Mais cela provoque un crash dès que j'essai de faire la même chose depuis un thread.

    Là où je ne comprends pas, c'est que les adresses des objets impactés, dans la méthodes static, semblent bonnes. Pourtant, je suis systématiquement envoyé sur un "Assertion Failed"

    Quelqu'un aurait-il une idée pour accéder à ces objets graphique depuis mon thread?

    Merci d'avance

  2. #2
    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
    Citation Envoyé par fantomchris Voir le message
    J'ai une classe de type CDialog qui contient un pointeur static sur elle-même
    Bizarre et étrange ta manière de faire !!

    ton pointeur il pointe sur quoi quand aucun dialogue n'a été créé , NULL je suppose.

    ton pointeur il pointe sur quoi quand plusieurs dialogues ont a été créé, le dernier je suppose.

    Ensuite quels sont les objets du CDialog que tu tente d'accéder. le CWnd de ton CDialog par exemple n'est probalement pas valide dans ton thread
    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
    .

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    En fait, si je comprends bien, cela voudrait dire qu'un pointeur vers une adresse donnée, n'est pas valable dans un autre thread que celui qui l'a créé?
    Pourtant une adresse est une adresse non?

    Bref, ma seule question est : comment faire pour accéder à l'objet graphique d'une classe CDialog depuis un thread lancé avec AfxBeginThread?

    Merci d'avance

  4. #4
    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
    Je suppose que ta variable static est du type CDialog * ou quelquechose comme cela.

    Comme je te l'ai dit précédemment, un CWnd * ne se passe pas d'un thread à l'autre. Je suis d'accord, ce sont des pointeurs mais avec un contexte qui lui appartient au thread courant.

    Si tu veux partager tes fenêtres entre thread, il faut partager le HANDLE de fenêtre.

    Donc ton membre static devrait être un HANDLE il doit être initialisé avec this->m_hWnd.
    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
    .

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    Bon ok...
    Je crois comprendre l'idée...

    Mais comment accéder aux contrôles d'une fenêtre simplement avec un HANDLE?

  6. #6
    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
    salut tu peux envoyer un message privé a la fenetre a partir du thread pour réaliser le boulot.
    voir faq:http://cpp.developpez.com/faq/vc/?pa...d#WorkerThread

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    AAAHHHH!!! Je n'y ai pas pensé une seule seconde.
    J'étais bloqué sur ma solution "static" alors que les événements étaient là.
    Merci de votre aide

    J'essaie de faire fonctionne le bousin et je mets en résolu si j'y arrive

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 177
    Points : 77
    Points
    77
    Par défaut
    MERCI!!!

    C'est exactement ce qu'il me fallait, et je suis d'autant plus vert que je suis passé sur cette partie de la FAQ sans penser que ça pouvait me débloquer. C'est parfait!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/02/2012, 08h57
  2. Réponses: 5
    Dernier message: 18/09/2008, 17h20
  3. accès concurrents à une méthode static
    Par chamamo dans le forum C#
    Réponses: 1
    Dernier message: 07/04/2008, 15h28
  4. Réponses: 3
    Dernier message: 19/03/2008, 09h38
  5. Accès à une méthode static
    Par demcoul dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2007, 17h55

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