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 de mise à jour de mes Edit Box


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    Points : 17
    Points
    17
    Par défaut Probleme de mise à jour de mes Edit Box
    Bonjour

    Je fais un prog similaire à un hyperterminal, J'ai donc fais un prog multithread, permetant l'envoi des caracteres ainsi que la reception de maniere concurente.

    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
     void ChyperterminalDlg::OnConnexion()
    {
    	HWND *phObjectHandle = new HWND ;
    	if(RS232Obj.m_port_is_open==false)
    	{
    		// Ouverture du port Serie
    		RS232Obj.m_hPort=RS232Obj.open_serial_port(0, 9600, 8, 0, 1);
    		if(!RS232Obj.m_hPort)
    			exit(-1);
    		RS232Obj.m_port_is_open=true;
     
    		*phObjectHandle = GetSafeHwnd();
    		// Cree un nouveau thread
    		if(!AfxBeginThread(&Lire_Donnee, phObjectHandle))
    		{ // Could not create thread
    			EndDialog(IDCANCEL);
    		}
     
     }
    Le problème est que le thread doit avoir le prototype suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static UINT Lire_Donnee(LPVOID pvParam);
    Le fait que celui ci soit static rend impossible la mise à jour de la variable de l'Edit Box (car non statique) ainsi que l'utilisation de la fonction UpdateData (meme problème).

    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
    UINT ChyperterminalDlg::Lire_Donnee(LPVOID pvParam)
    {
    	DWORD Nb_Octet_a_lire;
    	DWORD Nb_Octet_lus;
    	DWORD StatusModem;
    	BOOL result;
     
    	Nb_Octet_a_lire=1;
     
    	//Configuration du masque du gestionnaire d'evenement
    	SetCommMask(RS232Obj.m_hPort, EV_RXCHAR);
     
    	while(RS232Obj.m_port_is_open==true)
    	{
    		// Attente d'un evenement
    		// Ici Attendre que le Buffer d'entree ait un caractere
    		WaitCommEvent(RS232Obj.m_hPort,&StatusModem,0); 
     
    		//Reconfiguration du gestionnaire d'evenement
    		SetCommMask(RS232Obj.m_hPort, EV_RXCHAR); 
     
    		// Lecture du Buffer
    		result=ReadFile(RS232Obj.m_hPort /* HANDLE du peripherique a lire*/,
    						&(RS232Obj.Donnee_lue) /* Buffer d'enregistrement 
    											   des donnees lues*/,
    						Nb_Octet_a_lire /* Nbre d'octets à lire au Max*/ ,
    						&Nb_Octet_lus /* Nbre d'octets Lus réellement */,
    						&(RS232Obj.m_Ov) /* Overlapped */);
     
    		if(!result)	return -1; //Echec lors de la lecture
     
    		// Recuperation des donnees
    		if(!GetOverlappedResult( RS232Obj.m_hPort, &(RS232Obj.m_Ov), &Nb_Octet_lus, TRUE))
    			return -1;
     
     
     
     
    	}
     
    	//Fermeture demandée par l'utilisateur
    	AfxEndThread(0, // Fermeture normale du thread
    				 TRUE  //Efface le thread de la mémoire
    				 );
    	return 0;
    }
    Le caractere est correct (le debuggage me le confirme) mais je ne sais pas comment l'afficher dans mon EditBox. La variable associée à mon EditBox est du type CString.

    Quelqu'un connaitrait une astuce pour que je puisse afficher un caractere des que je le recois.

    Merci

    Bibi

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Une idéee comme ça : mettre le caractère lu dans une file d'attente, un timer venant lire cette file d'attente pour mettre à jour L'EditBox ?

  3. #3
    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,
    regarde la faq la reception série est dans un thread:
    http://c.developpez.com/faq/vc/?page...WithSerialPort

Discussions similaires

  1. Probleme de "mise à jour"
    Par sebpsi dans le forum Applets
    Réponses: 1
    Dernier message: 21/06/2006, 10h46
  2. Probleme de mise à jour de données
    Par sylvanians dans le forum Forms
    Réponses: 1
    Dernier message: 23/05/2006, 13h15
  3. Réponses: 10
    Dernier message: 28/12/2005, 22h52
  4. Probleme de mise à jour et de modification d'une base
    Par flambo88 dans le forum Requêtes
    Réponses: 17
    Dernier message: 07/12/2005, 15h27
  5. probleme de mise à jour de BD
    Par k_boy dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 30/05/2004, 22h58

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