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 :

Création d'un evenement/interruption


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut Création d'un evenement/interruption
    Je suis en train de coder un programme qui qui communique sur un port USB.
    Dans une fonction, j'envoie un message. Ensuite, je souhaite placer la fonction en attente jusqu'a ce que je recoive la valeur souhaitée ou, si il n'y a pas de reception, apres un certain tps.
    D'un autre coté, j'ai une fonction qui va lire sur le port USB et qui doit donc remonter l'information de la lecture. Celle ci fonctionne en parallele du reste du programme.

    Je souhaite donc envoyer une sorte d'interruption allant de la fonction de lecture à la fonction de traitement. Mais je ne sais pas vraiment comment faire.
    Quelqu'un aurait il au moins une piste pour démarrer.
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    bonjour,
    s'agit-il de deux programmes différents ?

    tu veux faire une communication inter-process ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    bonjour

    il s'agit bien d'un unique programe.

    Le programme effectue un traitement en fonction de différents messages qui parviennent.
    A certain moment, il envoye une commande et attend une réponse spécifique(notement un acquitement).


    La lecture est quand a elle effectué toutes les x mili sec grace a un timer.

    je souhaite avoir, danc ma fonction de traitement, une sorte de fonction "wait for ( reponse ). Quand la lecture lit bien la valeur attendu, elle envoie une interruption qui permet la suite du traitement. Sinon, apres X lecture, si la valeur n'est tjs pas la, je souhaite récupérer une interruption qui va arreter la fonction de traitement.

    Voila, j'espere etre assez clair. Encore merci d'avance.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Si tu as une pompe à message (ce qui est le cas, vu que tu as un timer ), alors tu peux éventuellement te notifier avec un message privé, en utilisant SendMessage et WM_USER+1 (par exemple)

  5. #5
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par cauriera
    je souhaite avoir, danc ma fonction de traitement, une sorte de fonction "wait for ( reponse ).
    WaitForSingleObject ?
    En mode asynchrone avec ReadFile, tu peux de cette manière créer un timeout sur la lecture, si j'ai bien compris ce que tu veux faire.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    (réponse au message précédent : SendMessage)

    Si je ne me trompe pas, le traitement de ce message ce fait dans winproc non?
    le probleme, c'est que celui ci ne sera jamais effectué si la fonction de traitement est en train de boucler pour attendre l'autorisation de continuer son traitement.
    En fait, ce qu'il me faut, c'est un moyen de bloquer ma fonction, ou de la faire boucler, mais sans prendre toute les ressources et sans bloquer le programme.
    Il n'existe pas une sorte de fonction wait event? et une autre qui pourrait déclencher cet event lors de la lecture de la valeur.

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    si WaitForSingleObject ou d'autres comme le dit aurélien

    mais qu'est-ce qui t'empeche de refaire une pompe à message dans ta boucle ?

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    la solution "barbare" que je pouvais faire, c'est apres l'envoie, faire une boucle qui attend qu'un booleen soit mis a vrai. Ce bouleen sera mis a true une fois la lecture faite et dans ce cas le traitement va reprendre. Mais dans ce cas la, le programme risque de ce retrouver bloqué en ne faisant que la boucle d'attente.

    En fait ce qu'il y a, c'est que je souhaite rester dans la fonction ou je suis. Je suis dans la fonction, celle ci s'arrete puis reprend la ou elle en etait apres la reception du message.

    Je cherche donc un moyen d'arret le traitement a un endrois, que le programme soit donc au repos et qu'il ne prenne pas de ressources et que celui ci reprenne a la reception d'un message provenant de la lecture.

    Mais j'avoue que je ne vois pas exactement comment implémenter la solution que tu me donne avec le send message. Cela permet peut etre de contourner mon probleme, mais je ne vois pas comment.
    J'avoue que mon probleme n'est pas evident a conprendre la comme ca, ni a expliquer d'ailleur. Mais si u pense avoir une idée je suis prenneur.

    Je vais voir sinon avec le waitsingleobjet()

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    pourquoi ne pas refaire une pompe à message dans ta fonction pour ... attendre ?

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par cauriera
    Il n'existe pas une sorte de fonction wait event? et une autre qui pourrait déclencher cet event lors de la lecture de la valeur.
    CreateEvent / WaitForSingleObject / SetEvent
    Mais l'attente avec WaitForSingleObject va bloquer ta boucle des messages. Soit tu balances ton traitement dans un autre thread, soit tu te troune vers les classiques messages (-> explications de nico).
    Un timer ne ferait pas l'affaire ?

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    Mon prob, c'est de pouvoir remonter l'information le plus rapidement possible, des la reception du message.
    Avec un timer, je risque de predre du temps.
    Par contre, pour la mise en place d'une pompe a message, je ne sais pas trop comment faire. Il me semblait que les messages étaient traité dans la fonction winproc mais j'ai peut etre loupé un truc.
    L'un de vous aurait il une adresse ou un exemple de la mise en place d'une pompe a message autre que lors de l'utilisation d'un timer.

    merci encore

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Dans ta fonction, tu rajoutes une boucle, comme il peut y avoir à cette adresse http://bob.developpez.com/tutapiwin/article_23.php, sauf qu'il te faut une condition de sortie de la boucle, un message particulier par exemple.

    Ensuite, tu fais ton traitement dans ta callback winproc, il n'y a pas de soucis

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    Dans ma fonction de lecture, j'ai placé un send message.

    Celui ci fonctionne bien puisque je récupére les msg dans la fonction WindowProc. Mais ce n'est pas le but.
    Par contre, la fonction qui attend le message, ou j'ai placé un while(GetMessage(&msg,NULL,0,0)) ne recoit rien. Du coup, la fonction reste bloqué et le traitement ne ce relance jamais.
    Je vois bien la solution de sortir dela fonction durant l'attente, puis si le message arrive, relancer une autre fonction (dans windowproc) qui reprend la suite du traitement, mais si je pouvais garder la structure que j'ai pour le moment ca serait mieux.
    Mais j'ai deja pas mal avancé. Merci

Discussions similaires

  1. Création de controles à l'execution et géstion de leurs evenements
    Par Acrobat dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/08/2006, 17h36
  2. [Composant] création d'evenement.
    Par Nicolos_A dans le forum Delphi
    Réponses: 9
    Dernier message: 04/06/2006, 07h27
  3. création d'evenements personnalisés
    Par chicore dans le forum Langage
    Réponses: 1
    Dernier message: 02/06/2006, 21h22
  4. [API win32 sans MFC] Création textbox et evenement bouton
    Par dacid dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 17/05/2006, 11h03
  5. Réponses: 6
    Dernier message: 14/04/2004, 20h44

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