Как вызвать функцию в указанное время? - PullRequest
0 голосов
/ 25 января 2011

Я хочу вызвать метод в 23:55 дня,

как это сделать в ActionScript 3?

Ответы [ 4 ]

2 голосов
/ 25 января 2011

Я бы сказал, что вы создаете цикл, который проверяет текущее время через объект Date.

package  {
import flash.display.Sprite;
import flash.utils.clearInterval;
import flash.utils.setInterval;
public class TimeCheck extends Sprite 
{
    private var interval:int;
    public function TimeCheck() 
    {
        interval = setInterval( checkTime, 1000 );//check performed every second
        checkTime();
    }
    private function checkTime():void 
    {
        var date:Date = new Date();
        if ( date.hours == 23 && date.minutes == 55 )//actual time check
        {
            clearInterval( interval );//kills the loop
            //... do something ...
        }
    }
}
}

обратите внимание, что это выполняется на стороне клиента, поэтому время клиента будет использоваться.хотя может быть способ синхронизировать его с временем сервера.

надеюсь, это поможет

1 голос
/ 25 января 2011

AS3 имеет тайм-ауты (например, setTimout), как JavaScript. О использовании setTimeout в AS говорится здесь . Учитывая две даты (сейчас и когда должен сработать будильник), вычислите разницу в миллисекундах и используйте ее в качестве параметра времени ожидания.

В качестве альтернативы (и даже гораздо менее эффективно, но не настолько, чтобы бросить взгляд), * ​​1008 * можно запускать каждую минуту, и если это «волшебное время» (или оно прошло, когда предыдущий интервал был раньше! Помните, что для наблюдения за всеми изменениями необходимо в 2 раза увеличить частоту, и может произойти сдвиг часов ...), затем включите звуковой сигнал.

Обратите внимание, что существуют некоторые ограничения, такие как закрытие хоста AS в течение периода ожидания или сдвиг часов. Вероятно, здесь не о чем беспокоиться о летнем времени, но при работе с датами / временем возникают проблемы с переходом на летнее время do .

Удачного кодирования.

Редактировать: AS также имеет Timer класс , который является оболочкой для функций setTimeout / setInterval / clearTimeout / clearInterval. В любом случае, если «работа с объектами» предпочтительнее.

0 голосов
/ 27 июня 2012

Я считаю, что вышеуказанные решения работают;однако, они кажутся очень дорогими с точки зрения производительности.У меня есть двухслойный, который (относительно) элегантный и прямой.Решение использует анонимную функцию, время на стороне клиента, и предполагает, что вам задан параметр startDate:Date.Я не проверял это, поэтому может быть простая логическая ошибка, но идея должна дать кому-то идеи.

var timer:Timer = (new Timer(startDate.time - (new Date()).time, 1)).addEventListener(TimerEvent.TIMER, function():void {
    // This area is called after the allocated time.
});
timer.start();
0 голосов
/ 25 января 2011

Я не проверял, но что-то вроде этого должно работать ...

 var eventDate:Date = new Date();
 eventDate.setHours( 23, 55 );
 var now:Date = new Date();

 var delay:Number = eventDate.time - now.time;

 if( delay > 0 )//if we haven't yet passed 23:55
 {
   var timer:Timer = new Timer( delay , 1 );
   timer.addEventListener( TimerEvent.TIMER , yourMethod );
   timer.start();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...