如果计时器已启动并正在运行,请勿使用flex 3再次重置计时器

时间:2010-09-01 12:49:55

标签: regex flex flex3 timer textarea

我有两个问题。

1 - 我有一个文本区域,我在其中匹配一个字符串。如果匹配则计时器将启动。但是这个条件很可能会不止一次满足,所以我想给出一个条件,如果计时器已经运行了什么都不做,if(!timer.running)然后启动计时器。但它每次都会重置计时器。

2 - 我有一个聊天窗口。对于每个用户活动,将向其显示一个句子。对于每个添加的句子,我必须执行一些操作。因此,我已经为单个函数中的每个句子执行了条件和操作,但问题是每次先前已执行的命令也会再次执行。 (例如上面的问题1.)所以一旦它匹配第一个字符串,它应该从文本区域的第二行开始搜索,我认为这可以做到这一点。任何帮助将不胜感激。

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 :(得分:0)

你的代码错了。以下是一些评论:

// 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);
}

它会工作,因为你不会在ever方法调用上重新初始化计时器。

答案 1 :(得分:0)

目前您正在创建一个新计时器,然后检查它是否正在运行,所以我认为第一部分将通过改变来改进

userTimer=new Timer(delay);

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

类似

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

对于第2部分,我不熟悉flex以便能够提供帮助,但不是检查userActivities.text,而是要检查它的最新子部分,例如最后一句。