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 averti
    Inscrit en
    Juillet 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 19
    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
    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 ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  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
    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, 09h46
  2. Probleme de mise à jour de données
    Par sylvanians dans le forum Forms
    Réponses: 1
    Dernier message: 23/05/2006, 12h15
  3. Réponses: 10
    Dernier message: 28/12/2005, 21h52
  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, 14h27
  5. probleme de mise à jour de BD
    Par k_boy dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 30/05/2004, 21h58

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