2009-12-16 14 views
1

有關於這一主題的堆棧溢出了一些問題,但我仍然不清楚:我可以保證所有監聽者在派發事件後都在下一行執行嗎?

我知道動畫引擎是單線程的,所以當它接收到一個事件,它本質上斷絕,執行任何註冊事件偵聽器(沒有保證順序),然​​後返回到當前範圍?

如果我有這樣的代碼:

addListener("stuff", function():void { 
    // some stuff 
}); 
addListener("stuff", someFunc); 
dispatch(new Event("stuff")); 
trace("Done."); 

我想知道:

我可以保證兩個聽衆都被我到達跟蹤(「完成」)時執行;一行?

編輯:

可我保證之前的任何事件偵聽器執行當前的函數將完成?即trace(「完成」);將始終執行。

也沒有。

回答

1

是的,你可以保證在這種確切的情況下的兩個斷言。 意思是,如果添加事件偵聽器並分派事件在中,則相同的代碼塊將按順序發生。但是,從實際的POV來看,這完全沒用。

@ kryoko:玩家事件優先於用戶事件,但他們不會「強制」自己通過。這意味着如果用戶代碼正在運行,玩家事件處理將被暫停。這就是爲什麼有可能用沉重而密集的代碼來「凍結」閃存電影。 (或者用一個簡單的無限循環,當然)

2

據我所知,當你分派一個事件時,它會被添加到事件隊列中,但直到當前正在執行的事件結束時纔會真正運行。換句話說,你會跟蹤「完成」,然後你的函數結束,控制傳遞迴事件處理程序,然後才(可能)開始執行其中一個事件。

+0

這是我本來以爲它的工作。檢查我更新的問題。 – timoxley 2009-12-16 00:32:14

+0

顯然,你的模型只能用這種方式來處理外部事件。由於我的功能是調度事件本身,所以偵聽器總是直接執行。 「如果一些外部事件被觸發......那麼我不相信該事件將被處理,直到當前例程完成。如果foo()本身觸發了一個事件,那麼流程將按照您所描述的完全進行 - 事件是立即在單一(主)線程上處理。「 - http://stackoverflow.com/questions/1267685/does-dispatching-an-event-interrupt-a-function – timoxley 2009-12-17 00:27:40

相關問題