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 :

PB de On_Message


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut PB de On_Message
    Bonjour,

    Voila je vous explique mon problème.

    Je développe une application en MFC qui récupère les données d'un spectromètre. Ce spectromètre est fourni avec une librairie qui me renvoi un spectre dans un tableau de 2048 valeur par l'intermédiaire d'un Message pour me dire que les données son prêtes.

    Jusqu'à la pas de problème je récupère bien mais données dans ma fonction OnDataReady qui correspond bien prototype demandé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LONG OnDataReady(UINT wParam,LONG lParam);
    Maintenant mon problème est de savoir comment faire pour que la fonction OnDataReady me prévienne que les données sont stockées et que je peux lancer le traitement.

    Voici mon code :

    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
    void CSpectre::Scan()
    {
     OnSingleScan(); //appelle la fonction qui lance l’acquisition du spectre
     
     //ici je voudrais avoir une solution qui me permette de rendre la main au
     //système et qui me prévienne que OnDataReady a reçu mais données a ce
     //moment la je reprendrai mon traitement. 
    ...
    ...
     
    }
     
    //fonction qui récupère le message et qui stocke le spectre dans ma classe
    LONG CSpectre::OnDataReady(UINT wParam,LONG lParam)
    {               
    	for (int i=0;i<=2047;i++)
    	{
    	m_arSpectre[wParam][i]=ooip.chdat[wParam][i];
    	}
    	OOI_BufferEmpty(hInstance,wParam);
    	return true;
    }
    Je vous remercie de bien vouloir m’aider car la je bloque je ne vois pas comment résoudre ce problème.

  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,
    tu pourrais envoyer un message privé a ta classe fenêtre à partir du message
    OnDataReady (postmessage)
    voir faq:
    http://c.developpez.com/faq/vc/?page...PrivateMessage

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Salut,

    Je te remercie de ta réponse et je vais tester l'envoie d'un message privé.
    Pour l'instant j'ai bricolé une fonction du style « DoEvents() en VB » avec un booléen comme déclencheur mais cette solution n’est pas a ma convenance.
    Peux-tu me dire ce que tu en pense ?


    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 CSpectre::Scan()
    {
    	m_bdataready=TRUE;
    	OnSingleScan();
    	while (m_bdataready==TRUE) //m_bdataready booléen mis à FALSE 
    		{                         //dans la function OndataReady
    		 DoEvents();
    		}
    }
     
    void CSpectre::DoEvents()
    {
    	MSG msg;
                 while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    	{
    	  TranslateMessage(&msg);
    	  DispatchMessage(&msg);
    	}
    }
    Pour ma part je vais voir laquelle des deux solutions a le temps d’exécution le plus correcte pour prendre une décision.
    Bonne journée et merci

Discussions similaires

  1. problème SendMessage en utilisant ON_MESSAGE
    Par mfcProgrammer dans le forum MFC
    Réponses: 6
    Dernier message: 25/03/2010, 11h42
  2. Réponses: 0
    Dernier message: 10/04/2008, 22h37
  3. Réponses: 7
    Dernier message: 11/07/2006, 09h31
  4. [MFC] ON_MESSAGE envoyer des donnes.
    Par ousta dans le forum MFC
    Réponses: 1
    Dernier message: 26/03/2006, 16h37

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