2010-06-09 36 views
11

¿ActionScript 2.0/3.0 tiene un equivalente de C# sleep()?Action Script Sleep function

+0

¿Para qué? –

+3

¿Quién marcó esta pregunta como duplicado ya que la respuesta ** real ** y correcta está solo aquí en este hilo a continuación? Es una buena pregunta y una buena [respuesta] (http://stackoverflow.com/a/3011589/1442225). – Bitterblue

Respuesta

19

No realmente. Podría bloquear (casi todos) la ejecución de código con algo como:

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()); 

Pero no veo cómo podría ser esto útil en el flash. Y, al mismo tiempo, cualquier cosa como el código anterior es una muy mala idea ya que el jugador se congelará y dejará de responder (y también podría dar un tiempo de espera de script si excede el límite de tiempo de espera, que es 15 por defecto).

Si simplemente desea retrasar la ejecución de un fragmento de código, puede utilizar un objeto Timer o la función setTimeout. Sin embargo, esto no será bloqueante, por lo que tendrás que usar algún tipo de bandera como sugiere TandemAdam. En el mejor de los casos será frágil.

Tal vez haya un mejor enfoque para su problema, pero no está claro qué está tratando de lograr en su pregunta.

+0

Gracias podría usar esto ... Solo quería retrasar la ejecución de algún bloque de código en menos de 100 ms. – Kemrop

+1

¡Es un buen código para fines de prueba! +1 – Worker

+0

Este es un uso completamente innecesario de la CPU, y casi con certeza debe ser downvoted. – sleepycal

1

Ningún ActionScript/Flash Player no tiene equivalente a la función C# sleep. Por un lado, Flash no usa múltiples hilos.

Debería implementar la funcionalidad manualmente.

Puede usar un indicador booleano, que su código solo se ejecutará cuando sea verdadero. Luego use el Timer class, para la demora.

3

puede implementar una función sleep así:

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

llamada con la función que debe ser procesada después de la pausa.

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

La ventaja de este enfoque es que la IU sigue siendo receptiva durante la suspensión.

+0

¡Hola! ¿Cómo se vería la función callLater? – IneedHelp

+0

@IneedHelp: ver mi respuesta actualizada – splash