在livecode中使用并发时如何管理功能?

时间:2014-07-25 10:39:54

标签: scope livecode

我有两个图形。这些图形具有倒计时功能。当打开卡时,这些图形开始倒计时。当倒计时到达0时,这些图形是调用功能“刷新”。这些图形同时是调用功能。如何管理?

这里我的卡上的代码用于图形使用功能:

on refresh
  if eCount is not empty then
    add 1 to eCount
  else
    put 0 into eCount
  end if
  wait 300 milliseconds with messages
  if eCount >= 2 then
    --dosomething()
    put empty into eCount
  end if
end refresh

更新---

local eCount

on refresh
  add 1 to eCount

  if eCount >= 2 then
    --dosomething()
    put 0 into eCount
  else if eCount = 1 then
    --dosomethingOnce()
    put 0 into eCount
  end if
end refresh

当两个图形同时具有“刷新”调用功能时。它的调用方法是“--dosomethingOnce()”。我该如何解决?

这是我的图形代码。

on countDown countT
   if countT > 0 then
     send "countDown countT" to me in 1 secs
   else
     send "refresh" to card "Main"
   end if
end countDown

2 个答案:

答案 0 :(得分:0)

我的理解是,只有当两个计时器都调用了刷新功能时,才会发生某些事情。请尝试以下方法..

local eCount

on refresh
  add 1 to eCount


  if eCount >= 2 then
    --dosomething()
    put 0 into eCount
  end if
end refresh

通过将eCount声明为脚本局部变量,在处理程序之前,它将保留它的值。当第二次调用刷新时,“做某事”'代码应该执行。

答案 1 :(得分:0)

这是我认为可以解决您问题的另一个想法(如果我理解正确的话!)

local eCount, sPending

on refresh
  add 1 to eCount
  if not sPending then
    put true into sPending
    send "doSomething" to me in 100 millisecs
  end if
end refresh

on doSomething
  if eCount = 1 then
    -- execute code for 1 timer
  else
    -- execute code for more than 1 timer
  end if

  -- reset flag
  put false into sPending
  put 0 into eCount
end doSomething

如果两个定时器在100毫秒之内完成,那么将执行多个定时器的代码 - 否则将执行1个定时器的代码。将100毫秒设置调整为您需要的任何设置。