2011-04-12 77 views

回答

4

正如亞歷克斯here說:

ActionScript是單線程的,如果你花了很多時間做重 計算,UI不能被更新,而你這樣做 計算,會出現你的應用程序卡住或效果不順利運行 。

同樣,在Actionscript中也沒有產生或阻塞。如果 下一行代碼應該運行,則無法阻止下一行 代碼的運行。這意味着當您調用Alert.show(), 時,下一行代碼將立即運行。

在很多其他運行時,必須先關閉警報窗口,然後再繼續下一行代碼 。線程可能有一天會成爲 Actionscript的一個功能,但在那之前,您必須忍受 的事實,即現在沒有這樣的事情。

4

ActionScript 3是單線程的。

您可以做的是將切片的工作切割得足夠小,以免響應不受影響。例如:

private var _long_process_work_object:LongProcessWorkClass; 
private var _long_process_timer:Timer; 

private function startSomeLongAndIntensiveWork():void 
{ 
    _long_process_work_object = new LongProcessWorkClass(); 

    _long_process_timer = new Timer(10); 
    _long_process_timer.addEventListener("timer", longProcessTimerHandler); 
    _long_process_timer.start(); 
} 

private function longProcessTimerHandler(event:TimerEvent):void 
{ 
    _long_process_timer.stop(); 

    // do the next slice of work: 
    // you'll want to calibrate how much work a slice contains to maximize 
    // performance while not affecting responsiveness excessively 
    _long_process_work_object.doSomeOfTheWork(); 

    if (!_long_process_work_object.Done) { 
     // long process is not done, start timer again 
     _long_process_timer.start(); 
     return; 
    } 

    // long process work is done, do whatever comes after 
} 
0

Flex 3基於ActionScript 3. ActionScript 3不提供對多線程的支持(不能編寫針對多線程執行的代碼)。 已編譯的Flex應用程序在Flash Player平臺上運行。 Adobe Flash Player 11.4又增加了對多線程的支持。