Fenêtre Intuition : remontée des évenements

6 sujets de 1 à 6 (sur un total de 6)

  • Counia

      #8536

      Bonjour,

      j’ai besoin d’aide sur la remonté des événements du port-série dans une fenêtre intuition.

      Dans « intuition.h », j’ai bien vu les constantes pour les bits à positionner IDCMP_xyz.

      Mais rien qui concerne le port-série.

      Dans un prog. sans fenêtre j’utilise un WAIT(msg du port-série).

      Mais sous une fenêtre intuition suis-je limité aux seuls événements IDCMP_xyz ???

      Et aussi sur l’événement MOUSEMOVE:

      J’ai un comportement différent (remontée ou non de cet Événement) selon que j’utilise OpenWindowTags ou que je fasse sans (dans ce cas je passe directement l’adresse d’une struct NewWindow à OpenWindow() ).

      Si quelqu’un peut m’expliquer ?

      Merci

      Alex

        #130812

        Dans un programme avec fenêtre Intuition tu fais aussi un Wait mais au lieu de le faire uniquement sur le port de message lié à ton port série tu le fais en même temps sur le port de message de ta fenêtre

        Wait( 1<mp_SigBit | 1 << pWindow->WindowPort->mp_SigBit )

        centaurz

          #130813

          @Counia

          Pour MOUSEMOVE, il faudrait regarder dans les autodocs, mais cela pourrait venir de WFLG_REPORTMOUSE qui n’est peut-être pas positionné par défaut avec l’une des fonctions, bien que cela paraisse bizarre vu que OpenWindow() doit juste se contenter d’appeler l’autre fonction.

          elwood

            #130814

            @Alex

            Cette ligne de code m’a toujours laissé froid :-)

            Tu peux m’expliquer pourquoi on fait un décalage à gauche des signaux ?

            seg

              #130815

              C’est parce que les SigBit sont des numéros de bit (sur un registre 32 bits).

              Donc, si SigBit vaut 0, il faut « allumer » le bit 0 (=1<<0) si tu veux quitter l'état d'attente de ta tâche sur le port représenté par ce bit. S'il vaut 1, il faut allumer le bit 1 (1<<1) pour quitter l'état d'attente, etc... Chaque port que tu crées à un bit alloué. Tu peux allouer jusqu’à 32 ports par tâche. Mais je crois qu’il y a une histoire de 15 bits réservé je sais plus trop pour quoi. Le coup des bits, c’est pour que le système fasse un test rapide sur un « registre » mémoire 32 bits pour savoir si la tâche doit rester en attente ou pas. Si ce registre vaut 0, alors il n’y a aucun événement à prendre en compte sur un des ports de la tâche. S’il est non nul, alors ça veut dire qu’il y a au moins un port mis à jour avec un message. Toi, dans ta fonction Wait(), tu passes les bits des ports qui t’intéressent et le système, en faisant un AND sur ce registre mémoire, saura qu’il faut quitter l’état d’attente de ta tâche. En pratique, dès qu’un message se plug à un port, le bit représenté par ce port s’allume à 1. Du coup, le système peut switcher sur ta tâche. Voilà pour l’explication simplifiée.

              Counia

                #130816

                L’événement série remonte, merci.

              6 sujets de 1 à 6 (sur un total de 6)

              • Vous devez être connecté pour répondre à ce sujet.

              Forums AmigaOS, MorphOS et AROS Développement Fenêtre Intuition : remontée des évenements

              Amiga Impact