Если таймер запущен и работает, не сбрасывайте его еще раз, используя flex3 - PullRequest
0 голосов
/ 01 сентября 2010

У меня 2 проблемы.

1 - у меня есть текстовая область, в которой я сопоставляю строку. Если это совпадает, то таймер запустится. Но это условие, вероятно, будет выполнено более одного раза, поэтому я хотел бы дать условие, что если таймер уже работает, ничего не делать, if(!timer.running), затем запустить таймер. Но он все равно сбрасывает таймер каждый раз.

2 - У меня есть окно чата. Для каждого пользовательского действия будет отображено предложение. Для каждого добавленного предложения я должен выполнить некоторые действия. Поэтому я дал условия и действия, которые должны выполняться для каждого предложения в одной функции, но проблема в том, что каждый раз предыдущие уже выполненные команды также выполняются еще раз. (например, вышеупомянутая задача 1.), поэтому, как только она совпадает с 1-й строкой, она должна начать поиск со 2-й строки в текстовой области, я думаю, что это может помочь любая помощь будет оценена.

public function updateMessage(updateMsg:String) : void
{
  userActivities.text+=updateMsg+"\n";

  if(userActivities.text.indexOf("user connected",0)!=-1)
  { 
    userTimer=new Timer(delay);

    if(!userTimer.running)
    { 
      basetmr=getTimer();
      userTimer.addEventListener(TimerEvent.TIMER,chkUserActivities);
      userTimer.start();
    }
    else
    {
      //trace("timerCount.."+userTimer.currentCount);
    }
  } 
  else if(userActivities.text.indexOf("user changed the image",0)!=-1 )
  {
    userActivities.text+="Click ReleaseDetails button to release your details to visitor";
  }
  else if(userActivities.text.indexOf("user quit the session",0)!=-1)
  {
    userTimer.stop();
  }
}  

Ответы [ 2 ]

0 голосов
/ 01 сентября 2010

В настоящий момент вы создаете новый таймер, а затем проверяете, работает ли он, поэтому я думаю, что первую часть можно улучшить, изменив значение с

userTimer=new Timer(delay);

if(!userTimer.running)
{ 
  basetmr=getTimer(); //etc

на что-то вроде

if(!userTimer.running)
{ 
  userTimer=new Timer(delay);
  basetmr=getTimer(); //etc
* 1006.* Для части 2 я недостаточно знаком с flex, чтобы иметь возможность помочь, но вместо проверки userActivities.text вы хотите проверить его последний подраздел, например, только последнее предложение.
0 голосов
/ 01 сентября 2010

Ваш код неверный.Вот некоторые комментарии:

// this line creaets a new timer        
userTimer=new Timer(delay);

// no code here to start the timer running

// userTimer.running will always be false and this condition will always be true
if(!userTimer.running)

Держу пари, если вы измените первую строку вашего метода на что-то вроде этого:

if(userTimer){    
 userTimer=new Timer(delay);
}

Это сработает, потому что вы не будете повторно инициализироватьтаймер при каждом вызове метода.

...