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

 C++ Discussion :

Utilisation d'un event Handle win32


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut Utilisation d'un event Handle win32
    Bonjour,

    je cherche à utiliser une fonction fournie par SDK d'un camera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetDriverEvent (HANDLE event)
    Cette fonction signifie à la camera de "générer un évenement" lorsque l'acquisition d'une image est terminé.

    Seuleument je ne sais pas ce qu'est un handle event ni comment l'utiliser et encore moins comment le relier à une fonction de mon code. Et j'ai beau chercher je n'ai rien vu ni sur la FAQ ni sur les tutos....

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Si cela à voir avec Andor SDK, faut regarder dans leur doc. Il me semble qu'il existe un CreateEvent.
    Tu dois avoir une doc associée avec le SDK non ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Il n'y a pas de fonction CreateEvent défini dans le SDK.
    mais apparement pour créer l'event ils disent de procéder comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HANDLE event = CreateEvent ()
    CreateEvent étant une fonction définie dans windows.h;

    mais mon problème principal c'est que je ne sais pas comment relier cet évenement à la bonne fonction... et je n'ai aps encore trouvé de tuto suffisament clair à l'heure actuelle....

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Les Events de Windows sont juste (en dehors des auto-reset Events) des booléens vrais ou faux, avec une fonction qui permet d'attendre passivement qu'ils deviennent vrais.
    Les fonctions sont:
    • CreateEvent() : Crée un objet Event. Le handle peut être fermé par CloseHandle(), l'Event est détruit quand tous ses handles sont fermés.
    • SetEvent(): Passe un Event à l'état vrai (Le terme Windows pour ça est "signaled").
    • ResetEvent(): Passe un Event à l'état faux ("nonsignaled")
    • WaitForSingleObject() et ses fonctions sœurs: Attente passive jusqu'à ce que l'Event soit vrai ("signaled").
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Lorsque c'est une fonction de l'API Win32, le premier réflexe à prendre est d'aller voir sur MSDN...

    MSDN : Using Event Object
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci pour vos réponses, elles m'ont permis d'écrire un morceau de code qui copile....
    par contre il y a quelques détail que je ne saisis pas bien :
    j'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    eventStatus = WaitForSingleObject (luca->acquEvent, 5000);
    	switch (eventStatus){
    	case WAIT_OBJECT_0:
    		FaisUnTruc();
    		ResetEvent (luca->acquEvent);
    		}
    		return;
    	case WAIT_TIMEOUT:
    		return;
    	}
    donc mon cas plusieurs évenements se suivent dans le temps, à intervalle régulier, mais seul le premier déclenche FaisUnTruc(). Est-il possible, sans avoir à passer pas une boucle, de pouvoir exécuter FaisUnTruc() pour chaque évènement??
    D'autre part si l'évenement se fait attendre le programme gèle (l'interface graphique surtout), après y avoir réfléchi je pense que c'est normal mais l'est-ce vraiment?

  7. #7
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par Zhitoune Voir le message
    Est-il possible, sans avoir à passer pas une boucle, de pouvoir exécuter FaisUnTruc() pour chaque évènement??
    Ton évènement est-il automatiquement réarmé ?

    Citation Envoyé par Zhitoune Voir le message
    D'autre part si l'évenement se fait attendre le programme gèle (l'interface graphique surtout), après y avoir réfléchi je pense que c'est normal mais l'est-ce vraiment?
    N'appelle pas les fonctions d'attente (y compris d'évènement) dans le thread principal de l'application, cela va bloquer la boucle de messages Windows, et donc geler ton interface graphique. Fais un thread à part, laisse le thread principal gérer l'IHM et fais ton travail dans d'autres threads.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci Mac LAK

    Pour le réarmage, je sais pas trop, vu que c'est la camera qui l'émet ,voila la seule chose que je sais :
    You must reset the event after it has been handled in order to receive additional triggers.
    du coup je pense que la caméra le réarme toute seule comme une grande . Mais même en "resetant" le HANDLE, seul le premier évenement est détecté

    pour le reste, je vais devoir me mettre au multithreading.....
    Merci encore!

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Si tu veux plusieurs trucs d'affilée, genre un modèle producteur/consommateur, c'est un sémaphore qu'il te faut, pas un événement...

    Typiquement, on fait un modèle 1 producteur/1 consommateur avec un buffer circulaire et deux Events: Un qui compte les places libres dans le buffer, l'autre qui compte les places occupées:
    • Pour ajouter un élément, le producteur:
      1. Attend une place libre
      2. Écrit l'élément dans le buffer, incrémente le pointeur d'écriture
      3. Signale une place occupée.
    • Dans sa boucle d'attente d'éléments, le consommateur:
      1. Attend une place occupée
      2. Lit l'élément dans le buffer, incrémente le pointeur de lecture
      3. Signale une place libre
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Il n'a pas trop le choix de la technologie, en fait : c'est la caméra qui impose l'event.

    C'est à toi de le réarmer, Zhitoune, après avoir effectué l'action issue du premier déclenchement.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Citation Envoyé par Mac LAK Voir le message
    Il n'a pas trop le choix de la technologie, en fait : c'est la caméra qui impose l'event.
    Ah c'est vrai, SetEvent() n'est pas ReleaseSemaphore().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    du coup comment tu fais pour le réarmer? Vu que resetevent ne suffit pas non plus que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    eventStatus = WaitForSingleObject (luca->acquEvent, 5000);
    	switch (eventStatus){
    	case WAIT_OBJECT_0:
    		FaisUnTruc();
    		ResetEvent (luca->acquEvent);
                    SetDrivreEvent (luca->acquEvent); // fonction destinée à la //caméra pour lui signifier d'émetre un signal
    		}
    		return;
    	case WAIT_TIMEOUT:
    		return;
    	}

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Eh bien, peut-être devras-tu te résoudre à utiliser un auto-reset event.
    Mais sache que dans tous les cas, il sera impossible de garantir que tu ne "manqueras" aucun événement. Il te faudrait un OS temps réel pour ça...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci à vous pour vos réponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [3.5] Server Control Event handling
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/10/2008, 14h07
  2. Comment utiliser le Post-Event
    Par alen dans le forum Visual C++
    Réponses: 4
    Dernier message: 16/09/2008, 11h19
  3. Utilisation d'un COM Delphi Win32 avec VB ou C# .NET
    Par ShaiLeTroll dans le forum Delphi .NET
    Réponses: 8
    Dernier message: 23/04/2008, 20h24
  4. Réponses: 0
    Dernier message: 25/02/2008, 13h53
  5. AWT et Event Handling
    Par henry.schmitt dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 13/02/2006, 16h07

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