Bonjour à tous,
j'ai un problème bizarre avec les Moprh et la gestion des évènements ... J'ai construit un Morph qui dans sa méthode step gènère un évènement du genre : self triggerEvent: #tick J'ai un autre objet qui observe le morph et récupère l'évènement en affichant juste un message sur le Transcript : morph when:#tick send:#show: to:Transcript with:'Tick'. J'ai une méthode exemple qui construit le Morph et l'objet qui observe le Morph ... et qui se termine par : ... morph openInHand pour ouvrir le Morph. Les choses bizarres commencent : rien ne s'affiche sur le Transcript, mais si je rajoute : ^morph à la fin de la méthode exemple, subitement les évènements générés par le Morph s'affiche dans le Transcript ... Je soupconne quelque chose avec le openInHand, mais je ne comprends pas trop ce qui se passe. Si quelqu'un a une idée ? Cordialement, -- Serge Stinckwich http://blog.doesnotunderstand.org/ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Pas d'idée.
Hilaire Serge Stinckwich a écrit : > Bonjour à tous, > > j'ai un problème bizarre avec les Moprh et la gestion des évènements ... > J'ai construit un Morph qui dans sa méthode step gènère un évènement du genre : > self triggerEvent: #tick > > J'ai un autre objet qui observe le morph et récupère l'évènement en > affichant juste un message sur le Transcript : > > morph when:#tick send:#show: to:Transcript with:'Tick'. > > J'ai une méthode exemple qui construit le Morph et l'objet qui observe > le Morph ... et qui se termine par : > > ... > morph openInHand > > pour ouvrir le Morph. > > Les choses bizarres commencent : rien ne s'affiche sur le Transcript, > mais si je rajoute : ^morph à la fin de la méthode exemple, > subitement les évènements générés par le Morph s'affiche dans le > Transcript ... Je soupconne quelque chose avec le openInHand, mais je > ne comprends pas trop ce qui se passe. > > Si quelqu'un a une idée ? > > Cordialement, _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by Serge Stinckwich
j'ai essayé de reproduire ton problème sur mon image habituelle, une
3.8.1, mais tout marche bien... est-ce spécifique à une image particulière ? Stef _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by Serge Stinckwich
Serge,
Envoies nous le bout de code qui montre le pb. Noury On 14 mai 08, at 18:05, Serge Stinckwich wrote: > Bonjour à tous, > > j'ai un problème bizarre avec les Moprh et la gestion des > évènements ... > J'ai construit un Morph qui dans sa méthode step gènère un évènement > du genre : > self triggerEvent: #tick > > J'ai un autre objet qui observe le morph et récupère l'évènement en > affichant juste un message sur le Transcript : > > morph when:#tick send:#show: to:Transcript with:'Tick'. > > J'ai une méthode exemple qui construit le Morph et l'objet qui observe > le Morph ... et qui se termine par : > > ... > morph openInHand > > pour ouvrir le Morph. > > Les choses bizarres commencent : rien ne s'affiche sur le Transcript, > mais si je rajoute : ^morph à la fin de la méthode exemple, > subitement les évènements générés par le Morph s'affiche dans le > Transcript ... Je soupconne quelque chose avec le openInHand, mais je > ne comprends pas trop ce qui se passe. > > Si quelqu'un a une idée ? > > Cordialement, > -- > Serge Stinckwich > http://blog.doesnotunderstand.org/ > _______________________________________________ > Squeak-fr mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr > Noury Bouraqadi ------------------------------------------------------------------ Dr. Noury Bouraqadi - Enseignant/Chercheur Responsable de l'enseignement de l'informatique ARMINES - Ecole des Mines de Douai - Dept. I.A. http://vst.ensm-douai.fr/noury European Smalltalk Users Group Board http://www.esug.org ------------------------------------------------------------------ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
J'ai mis le code qui pose problème en attachement de ce message.
J'ai 3 objets : un Morph (de la classe MyMorph) qui émet régulièrement des évènements #tick, un objet Pour tester le code, il faut exécuter : MyMorph example1 et MyMorph example2. La seule différence est que la deuxième version retourne le morph en résultat. J'ai testé dans les images squeak suivantes (les deux premières sont des images squeak-dev de Damien) : - sq3.10-7159dev08.05.2 : example1 n'affiche rien, example2 affiche régulièrement les évènements dans le Transcript. - sq3.9-7067dev07.10.1 : example1 n'affiche rien, example2 n'affiche qu'un seul évènement. - Squeak3.8.1-6747full : idem que précédente - Pharo0.1-10021 : idem que précédente L'image squeak-dev 3.10 incorpore les UI enhancements de Pinesoft, ce qui explique peut-être le comportement différent, mais c'est la seule version (example1) qui semble être le comportement correct. Pourquoi les autres images n'affichent pas régulièrement les évènements ? Cordialement, -- Serge Stinckwich http://blog.doesnotunderstand.org/ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr SergeStinckwich.st (2K) Download Attachment |
j'ai trouvé:
dans ton example1, l'object référencé par m est garbage-collecté parce qu'il n'est pas retourné par la méthode (le pourquoi de ce comportement ne m'est pas très clair); du coup, un WeakMessageSend pert son receiver, et la chaine de tes événements est interrompue. pour t'en convaincre, deux choses: 1) fait MyMorph example1, ouvre un explorateur sur le morph qui apparait "in Hand" et regarde son actionMap (dans extension, otherProperties). c'est un WeakMessageSend dont le receiver est nil. donx le message #eventOccured n'a nulle part où aller. 2) va dans la méthode Object>>When:send:to: et remplace WeakMessageSend par MessageSend. ça marche. conclusion: tu est tombé sur une configuration où la viabilité d'un de tes objects n'est pas suffisamment assurée (manque de référence), et donc il disparait prématurément, plus ou moins vite ce qui explique que tu puisse voir un message dans le Transcript, ou aucun. CQFD ? Stef _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Le 15 mai 2008 22:59, Stéphane Rollandin <[hidden email]> a écrit :
> j'ai trouvé: Bingo ! Merci Stéphane. > dans ton example1, l'object référencé par m est garbage-collecté parce qu'il > n'est pas retourné par la méthode (le pourquoi de ce comportement ne m'est > pas très clair); du coup, un WeakMessageSend pert son receiver, et la chaine > de tes événements est interrompue. Oui, je commence à comprendre, mais la sémantique ne me parait pas très claire également ... ce type de comportement me parait très fragile. Surtout que le comportement n'est pas identique suivant la version de Squeak. Même en retournant l'instance m à la fin de example2 dans une image 3.9, je n'ai pas le comportement souhaité : un affichage régulier d'évènements. Par contre, dés que je fais un inspect sur MyMorph example2, cela marche ... donc c'est bien un problème de référence qui disparait. > pour t'en convaincre, deux choses: > > 1) fait MyMorph example1, ouvre un explorateur sur le morph qui apparait "in > Hand" et regarde son actionMap (dans extension, otherProperties). c'est un > WeakMessageSend dont le receiver est nil. donx le message #eventOccured n'a > nulle part où aller. Oui, j'avais déjà remarqué cela. > 2) va dans la méthode Object>>When:send:to: et remplace WeakMessageSend par > MessageSend. ça marche. En effet, cela marche sans problème dans Sq3.9 et 3.10. Pourquoi la gestion des évènements est basée sur des WeakMessageSend et pas des MessageSend ? J'imagine pour éviter d'avoir des erreurs si j'essaie d'envoyer un message mal formé ? > conclusion: tu est tombé sur une configuration où la viabilité d'un de tes > objects n'est pas suffisamment assurée (manque de référence), et donc il > disparait prématurément, plus ou moins vite ce qui explique que tu puisse > voir un message dans le Transcript, ou aucun. > > > CQFD ? > > Stef > > _______________________________________________ > Squeak-fr mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr > -- Serge Stinckwich http://blog.doesnotunderstand.org/ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Le vendredi 16 mai 2008 à 09:21 +0200, Serge Stinckwich a écrit : > Oui, je commence à comprendre, mais la sémantique ne me parait pas > très claire également ... > ce type de comportement me parait très fragile. Surtout que le > comportement n'est pas identique suivant la version de Squeak. > > Même en retournant l'instance m à la fin de example2 dans une image > 3.9, je n'ai pas le comportement souhaité : un affichage régulier > d'évènements. Mais que fais tu de cette instance retournée? La référence tu dans une variable dans un Worksapce. P'tet que le comportement du workspace est différent dans les images que tu as testée. Hilaire -- CDDP des Landes Ingénierie éducative BP401 - 614, rue du ruisseau 40012 Mont de Marsan cedex T 05 58 75 50 10 F 05 58 06 29 18 http://crdp.ac-bordeaux.fr/cddp40 _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr signature.asc (196 bytes) Download Attachment |
In reply to this post by Serge Stinckwich
Serge Stinckwich a écrit :
> Pourquoi la gestion des évènements est basée sur des WeakMessageSend > et pas des MessageSend ? je ne sais pas, ça correspond sans doute à un paradigme de gestion d'événements bien précis peut-être documenté quelque part. personnellement je n'utilise jamais #when:send:to: et je ne connais pas bien ce système. je préfère envoyer des messages directement plutôt que générer des évènements. Stef _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Oui, tu peux toujours recréer un mécanisme de gestion d'évènements
adhoc mais bon c'est un peut bête puisqu'il existe déjà ... Le 16 mai 2008 10:10, Stéphane Rollandin <[hidden email]> a écrit : > Serge Stinckwich a écrit : >> >> Pourquoi la gestion des évènements est basée sur des WeakMessageSend >> et pas des MessageSend ? > > je ne sais pas, ça correspond sans doute à un paradigme de gestion > d'événements bien précis peut-être documenté quelque part. > > personnellement je n'utilise jamais #when:send:to: et je ne connais pas bien > ce système. je préfère envoyer des messages directement plutôt que générer > des évènements. > > > Stef > > _______________________________________________ > Squeak-fr mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr > -- Serge Stinckwich http://blog.doesnotunderstand.org/ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by Hilaire Fernandes-2
2008/5/16 Hilaire Fernandes <[hidden email]>:
> > Le vendredi 16 mai 2008 à 09:21 +0200, Serge Stinckwich a écrit : > >> Oui, je commence à comprendre, mais la sémantique ne me parait pas >> très claire également ... >> ce type de comportement me parait très fragile. Surtout que le >> comportement n'est pas identique suivant la version de Squeak. >> >> Même en retournant l'instance m à la fin de example2 dans une image >> 3.9, je n'ai pas le comportement souhaité : un affichage régulier >> d'évènements. > > Mais que fais tu de cette instance retournée? La référence tu dans une > variable dans un Worksapce. P'tet que le comportement du workspace est > différent dans les images que tu as testée. Je n'en fais rien de particulier ... Il me semble me souvenir que le workspace garde des références vers les objets. -- Serge Stinckwich http://blog.doesnotunderstand.org/ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by Serge Stinckwich
Serge Stinckwich a écrit :
> Oui, tu peux toujours recréer un mécanisme de gestion d'évènements > adhoc mais bon c'est un peut bête puisqu'il existe déjà ... j'ai pas encore fait le tour de tout ce qui existe déjà dans Squeak :) Stef _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
In reply to this post by Hilaire Fernandes-2
Je pense que l'ensemble des problèmes provient du fait que certains de
mes objets sensés surveiller des évènements sont garbagés de manière fortuite ... Je vais faire dépendre tous les objets que je crée de mon Morph ... cela devrait aller mieux ;-) -- Serge Stinckwich http://blog.doesnotunderstand.org/ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
J'ai fait le test avec une 3.10-7159 dev d'avril. Je n'ai rien qui
apprait sur le transcript ! Ca ne marche que lorsque je stock l'objet retourné dans l'exemple 2 dans une variable dans le workspace. Je confirme l'analyse de Stéphane, tu perds la référence sur ton objet qui est supprimé. Du coupe le receiver du WeakMessageSend devient nil ce qui a pour conséquence ne pas évaluer le message. Je pense que c'est une sémantique défendable puisque l'objectif est d'avoir une relation souple et ne pas bloquer le GC des objets destinataires des évenements. Noury On 16 mai 08, at 11:08, Serge Stinckwich wrote: > Je pense que l'ensemble des problèmes provient du fait que certains de > mes objets sensés surveiller des évènements sont garbagés de manière > fortuite ... > Je vais faire dépendre tous les objets que je crée de mon Morph ... > cela devrait aller mieux ;-) > > -- > Serge Stinckwich > http://blog.doesnotunderstand.org/ > _______________________________________________ > Squeak-fr mailing list > [hidden email] > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr > Noury Bouraqadi ------------------------------------------------------------------ Dr. Noury Bouraqadi - Enseignant/Chercheur Responsable de l'enseignement de l'informatique ARMINES - Ecole des Mines de Douai - Dept. I.A. http://vst.ensm-douai.fr/noury European Smalltalk Users Group Board http://www.esug.org ------------------------------------------------------------------ _______________________________________________ Squeak-fr mailing list [hidden email] http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr |
Free forum by Nabble | Edit this page |