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]Recuperation de variable situé dans un thread


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut [MFC]Recuperation de variable situé dans un thread
    Bonjour

    Voila j'ai besoin de recupere 3 variable situé a l'interireure d'un thread et je ne sais pas trop comment m'y prendre

    voila mon code les variable a recuperer son strHeure strMin et strSec

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    CHologe::CHologe()
    {
    	m_pTHreadHorloge=AfxBeginThread(ThreadHorloge,this,THREAD_PRIORITY_LOWEST);	
    	m_pTHreadHorloge->m_bAutoDelete=false;
    	m_bFin=false;
    }
     
    CHologe::~CHologe()
    {
    	m_bFin=true;
    }
     
     
    UINT ThreadHorloge(LPVOID pParam)
    {
     
    	CHologe* pObject = (CHologe*)pParam;
    	bool bTopSeconde=false;
    	CTime horloge /*= CTime::GetCurrentTime()*/;
     
    	int nHeure;
    	int nMin;
    	int nSec;
     
    	CString strHeure;
    	CString strMin;
    	CString strSec;
     
    	while(pObject->m_bFin!=true)
    	{
    		horloge = CTime::GetCurrentTime();
    		nHeure=horloge.GetHour();
    		nMin=horloge.GetMinute();
    		nSec=horloge.GetSecond();
     
    		/*CStatic * heure=(CStatic *)pObject->GetDlgItem(IDC_TEXT_HEURE);
    		CStatic * min=(CStatic *)pObject->GetDlgItem(IDC_TEXT_MIN);
    		CStatic * sec=(CStatic *)pObject->GetDlgItem(IDC_TEXT_SEC);*/
     
    		strHeure.Format("%d",nHeure);
    		strMin.Format("%d",nMin);
    		strSec.Format("%d",nSec);
     
    		/*heure->SetWindowText(strHeure);
    		min->SetWindowText(strMin);
    		sec->SetWindowText(strSec);
    		pObject->Invalidate();*/
     
    		Sleep(1000);
    	}
    	return 1;
    }
    merci de votre aide

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    si tu veux recuperer les valeurs dans une classe fenetre ,tu peux stocker ces elements dans des donnees membres de la classe qui lance le thread .
    et envoyer un message privé pour signifier l'affectation.
    exemple de message privé :
    http://c.developpez.com/faq/vc/?page...CDialogRunTask
    exemple d'utilisation de worker thread:
    http://c.developpez.com/faq/vc/?page...WithSerialPort

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    ai mais mon probleme justement c'est comment enregistrer ces variables dans la classe

  4. #4
    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
    il faut passer en argument l'adresse de la classe (this) en parametre de lancement du thread extrait de la faq post concernant la voie serie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!(m_pThread = AfxBeginThread(Thread, this))

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    ok j'ai trop du mal aujourd'hui je croit que j'ai resolu le prob

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    pour les variable c'est bon mais maintenant je cherche le moyen de faire un Invalidate dans le thread
    Une idee?????


    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    CHologe::CHologe()
    {
     
    	m_pTHreadHorloge=AfxBeginThread(ThreadHorloge,this,THREAD_PRIORITY_LOWEST);	
    	m_pTHreadHorloge->m_bAutoDelete=false;
    	m_bFin=false;
    }
     
    CHologe::~CHologe()
    {
    	m_bFin=true;
    }
     
     
    UINT ThreadHorloge(LPVOID pParam)
    {
     
    	CHologe* pObject = (CHologe*)pParam;
    	bool bTopSeconde=false;
    	CTime horloge /*= CTime::GetCurrentTime()*/;
     
    	int nHeure;
    	int nMin;
    	int nSec;
     
     
    	while(pObject->m_bFin!=true)
    	{
    		horloge = CTime::GetCurrentTime();
    		nHeure=horloge.GetHour();
    		nMin=horloge.GetMinute();
    		nSec=horloge.GetSecond();
     
    		pObject->m_strHeure.Format("%d",nHeure);
    		pObject->m_strMin.Format("%d",nMin);
    		pObject->m_strSec.Format("%d",nSec);
     
    		Sleep(1000);
     
    	}
    	return 1;
    }

  7. #7
    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,
    il suffit de faire un Invalidate sur la fenetre concernée .
    attention tout de même à ça :
    http://c.developpez.com/faq/vc/?page...d#WorkerThread
    dans ton cas le invalidate devrait fonctionner .

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    ouai mais pParam ne pointe pas dans mon cas sur une fenetre mais une classe horloge

  9. #9
    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
    et bien il faut que tu te debroulles pour avoir un pointeur sur cette fenetre stocker dans cette classe pour que le thread puisse y acceder ...

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    c'est fait mais maintenant mon prog ne se lance pas (il apparait en processus mais pas en application)

    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
    31
    UINT ThreadHorloge(LPVOID pParam)
    {
     
    	CHologe* pObject = (CHologe*)pParam;
    	bool bTopSeconde=false;
    	CTime horloge /*= CTime::GetCurrentTime()*/;
     
    	int nHeure;
    	int nMin;
    	int nSec;
     
     
    	while(pObject->m_bFin!=true)
    	{
    		horloge = CTime::GetCurrentTime();
    		nHeure=horloge.GetHour();
    		nMin=horloge.GetMinute();
    		nSec=horloge.GetSecond();
     
    		pObject->m_strHeure.Format("%d",nHeure);
    		pObject->m_strMin.Format("%d",nMin);
    		pObject->m_strSec.Format("%d",nSec);
     
    		//CPCControleDlg fen1;
    		//fen1.PostMessage(WM_USER+1); 
    		pObject->m_pDialog->Invalidate();
    		Sleep(1000);
     
    	}
    	return 1;
    }

  11. #11
    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
    a la place de invalidate attaque directe les controles responsables de l'heure par un SetWindowText.

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    En fait je v oulais eviter cette solution pour bien separer l'ihm du reste du code

  13. #13
    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
    alors envoi un message privé qui fait le boulot d'affichage (solution deja evoquée plus haut dans le fil du post) .
    comme ça l'application n'a pas de probleme pour s'afficher ..

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    memoire ne peut etre written

    une idée ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ::PostMessage((HWND)pParam,WM_USER+1,0,0);

  15. #15
    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 ,
    oui ça c'est mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ::PostMessage(pObject->m_pDialog->m_Hwnd,WM_USER+1,0,0);

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    mmmmmmmmmmmm
    C'est quoi m_Hwnd ???

  17. #17
    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 me suis trompé sur les majuscules/minuscules:
    CWnd::m_hWnd

  18. #18
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    tj meme prob memoire ne peut etre written et apres memoire ne peut etre read et obliger de redemarer le pc car j'ai beau fire ok il reste la le message

  19. #19
    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
    quelle est la valeur du pointeur : pObject->m_pDialog ?
    (en debug bien sur)

  20. #20
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    0xcdcdcdcd

    mias c'est sur cette ligne que ca plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::PostMessage(pObject->m_pDialog->m_hWnd,WM_USER+1,0,0);
    j'vais verifier l'initialisation de mon pointer

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/12/2006, 19h20
  2. [PHP-JS] recuperer une variable javascript dan php
    Par hammag dans le forum Langage
    Réponses: 2
    Dernier message: 07/08/2006, 14h00
  3. PB recuperation dune donnée situé dans un bean
    Par Kpone dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/04/2006, 05h46
  4. [Tableaux] recuperer un contenu situé dans un tableau
    Par jeanfrancois dans le forum Langage
    Réponses: 7
    Dernier message: 06/03/2006, 15h12
  5. Réponses: 1
    Dernier message: 22/12/2005, 08h15

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