ActionScript的Sleep函数

12
ActionScript 2.0/3.0是否有类似于C# sleep()的等待函数?

3
谁将这个问题标记为重复,因为真正的和正确的答案只在下面的帖子中? 这是一个很好的问题和一个很好的答案 - Bitterblue
3个回答

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秒的超时限制,它还可能会给出一个脚本超时)。

如果你仅想延迟执行一段代码,你可以使用一个计时器对象或setTimeout函数。这将是非阻塞的,但是你必须使用一些类似于TandemAdam建议的标志。最好情况下,这将是脆弱的。

也许有更好的方法解决你的问题,但是从你的问题中不清楚你试图实现什么。


谢谢,我可以用这个。只是想要延迟执行一些代码块不到100毫秒。 - Kemrop
1
这是一个很好的测试代码!+1 - Worker
这是完全不必要的 CPU 使用,几乎肯定应该被投反对票。 - SleepyCal
这对于测试非常好。在调试时间问题方面非常有用。显然,它不应该在生产中使用。 - Max A.

4
您可以像这样实现一个 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, []);

这种方法的优点在于,在睡眠期间用户界面仍然能够响应。

你好!callLater函数会是什么样子? - IneedHelp
非常好用,非常感谢! - Tox

1

没有类似于 C# sleep 函数的 ActionScript/Flash Player 等效功能。毕竟,Flash 不使用多个线程。

您必须手动实现该功能。

您可以使用布尔标志,仅当为 true 时,您的代码才会执行。然后使用 Timer 类 进行延迟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接