Thanks Gordon for your prompt reply and sample code. I will confirm you about my findings till day end and hopefully post the example code too.
--- Gordon Smith <[EMAIL PROTECTED]> wrote: > The tried the program below and the output that > appears is > > 1a > 1b > 2 > > indicating that handler1() runs to completion before > handler2() starts > executing. And when I set breakpoints on the three > t.text assignments in > both handlers, I hit them in the expected > synchronous order. > > > Both alert message boxes are displyed at the same > time > > even though the first handler is still inside the > for loop. > > > They're displayed at the same time because the Flash > Player doesn't > redraw the stage immediately when you call > Alert.show(); it waits until > later, by whicn time all the handlers have > completed. I think you were > jumping to the incorrect conclusion that since the > two alerts appeared > together, the first handler must have been still > inside the loop. Am I > right? > > - Gordon > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application > xmlns:mx="http://www.adobe.com/2006/mxml > <http://www.adobe.com/2006/mxml> "> > > <mx:Script> > <![CDATA[ > > private function doit():void > { > addEventListener("doit", handler1); > addEventListener("doit", handler2); > dispatchEvent(new Event("doit")); > } > > private function handler1(event:Event):void > { > t.text += "1a\n"; > for (var i:int = 0; i < 1000000000; i++) > { > } > t.text += "1b\n"; > } > > private function handler2(event:Event):void > { > t.text += "2\n"; > } > > ]]> > </mx:Script> > > <mx:Button id="b" click="doit()"/> > > <mx:Text id="t"/> > > </mx:Application> > > > ________________________________ > > From: [email protected] > [mailto:[EMAIL PROTECTED] On > Behalf Of Jehanzeb Musani > Sent: Wednesday, November 28, 2007 2:16 PM > To: [email protected] > Subject: RE: [flexcoders] Events and Non-Display > Objects > > > > Thanks Gordon for you prompt reply. > > Gordon, my experience is somewhat different that > what > you explained. As per my experience, I feel the > handler functions of listeners are called > asynchronously in the order the handlers were > registered. > > By synchornous, I mean if the handler of the first > listener calls a blocking function or perform some > time consuming calculation (let say runs a for loop > for 5000000 times) then the handler of the second > listener will not be called unless the handler of > the > first listener returns. > > I have tested it by a couple of techniques. > > 1. Handler function of first listener displays an > alert and then iterates for 5000000 times > (performing > some useless tasks like modifying the same property > of > the object). Handler function of second listener > simply display alert. Both alert message boxes are > displyed at the same time even though the first > handler is still inside the for loop. > > 2. Here I apply the break point on the first > instruction of handler functions of both listeners. > The functionaly of handler functions are the same as > expained in above. The debugger break on the > instruction of first handler and then I press F8. > The > debugger then breaks on the instruction of the > second > handler, however, the first handler function is > still > inside the for loop. > > Can you still confirm that eventdispatcher invokes > the > handlers in synchronous manner? I am implementing a > publisher-subscriber scenario using EventDispatcher > and the desing decision will be highly affected by > the > behavior of deafault EventDispatcher. > --- Gordon Smith <[EMAIL PROTECTED] > <mailto:gosmith%40adobe.com> > > wrote: > > > > Does EventDispatcher calls the listeners > > synchronously or > > asynchronously? > > > > Synchrously, in the order that they were added. To > > see that the handlers > > execute before dispatchEvent() returns, add a > > handler which traces out > > something and single-step in FlexBuilder or fdb > over > > a dispatchEvent() > > call. You should see the trace output. > > > > BTW, I may be the only person in the world that > > distinguishes between a > > listener and a handler. A listener is an object > that > > is interested in > > knowing about an event dispatched by another > object, > > while a handler is > > a method of the listener that executes in response > > to the event. The > > name addEventListener() is somewhat confusing. You > > might think that > > you'd have to pass it both listener and a handler > > (to tell it which > > method to execute, and which object to use as the > > method's 'this'), but > > due to the magic of method closures, you only need > > to pass the handler > > and it implies the listener. > > > > > Does the EventDispatcher make copies of the > event > > > object provided to EventDispatcher's > dispatchEvent > > > function when calling the listeners? Let say, I > > define > > > 2 listeners for specific event type. The first > > > listener modify some properties of the event > > object. > > > Do the second listener get the modified one or > the > > > copy of the original one? > > > > The second listener gets the modified event > > instance. A copy doesn't > > happen in this case. > > > > However, when an event handler calls > dispatchEvent() > > to redispatch the > > event in the middle of event processing, then > > dispatchEvent() close the > > event's clone() method to copy it and redispatches > > the copy. > > > > Gordon Smith > > Adobe Flex SDK Team > > > > ________________________________ > > > > From: [email protected] > <mailto:flexcoders%40yahoogroups.com> > === message truncated === ____________________________________________________________________________________ Get easy, one-click access to your favorites. Make Yahoo! your homepage. http://www.yahoo.com/r/hs

