2010-06-09 105 views
11

actionscript 2.0/3.0有相当于c#sleep()吗?动作脚本睡眠功能

+0

为了什么目的? – 2010-06-09 21:34:28

+3

谁将这个问题标记为重复,因为**真正的**和正确的答案只在这里在这个线程在这里?这是一个很好的问题和一个很好的答案(http://stackoverflow.com/a/3011589/1442225)。 – Bitterblue 2014-04-25 10:56:30

回答

19

不是。你可以阻止(几乎所有)代码执行类似于:

function sleep(ms:int):void { 
    var init:int = getTimer(); 
    while(true) { 
     if(getTimer() - init >= ms) { 
      break; 
     } 
    } 
} 

trace("hello"); 
trace(getTimer()); 
sleep(5000); 
trace("bye"); 
trace(getTimer()); 

但我不明白这怎么可能在flash中有用。同时,与上述代码类似的是一个非常糟糕的想法,因为播放器会冻结并且无响应(如果超过超时限制(默认为15),也可能会导致脚本超时)。

如果您只想延迟执行一段代码,可以使用Timer对象或setTimeout函数。不过,这将是非阻塞的,因此您必须使用TandemAdam建议的某种标志。它最好会变脆。

也许对于您的问题有更好的方法,但不清楚你在你的问题中想要完成什么。

+0

谢谢,我可以使用这个..只是想延迟一段代码的执行时间少于100ms。 – Kemrop 2010-06-10 17:51:00

+1

这是一个很好的测试代码! +1 – Worker 2012-09-18 13:02:05

+0

这是一个完全不必要的CPU使用,几乎肯定应该是downvoted。 – sleepycal 2014-05-11 16:06:46

1

没有ActionScript/Flash Player没有等效于c#sleep函数。有一件事,Flash不使用多个线程。

您将不得不手动实现该功能。

你可以使用一个布尔标志,你的代码只会在true时执行。然后使用Timer class作为延迟。

3

您可以实现sleep功能是这样的:

function sleep(counter: int, subsequentFunction: Function, args: Array): void 
{ 
    if (counter > 0) 
     callLater(sleep, [counter - 1, subsequentFunction, args]); 
    else 
     callLater(subsequentFunction, args); 
} 

与应暂停后要处理的函数调用它。

// call trace('Hello') after 100 cycles 
sleep(100, trace, ['Hello']); 
// call myFunction() after 50 cycles 
sleep(50, myFunction, []); 

这种方法的优点是,在睡眠期间UI仍然响应。

+0

你好! callLater函数将如何? – IneedHelp 2012-01-14 17:30:52

+0

@IneedHelp:查看我更新的答案 – splash 2012-01-18 12:35:49