2013-08-12 4 views
1

Учитывая приведенный ниже код R3-GUI, есть ли способ получить доступ к тому, сколько времени осталось в таймере? Идентификатор таймера возвращается set-timer, но я не уверен, есть ли что-нибудь, что я могу с ним сделать?Как получить доступ к значению таймера после его установки?

set-timer [print "done"] 60 

Другими словами, то, что я ищу в поддельной примере кода:

>> get-timer/time-remaining timer-id 
== 0:0:21 

ответ

0

Ответ можно найти, посмотрев на источник set-timer

>> source set-timer 
set-timer: make function! [[ 
    {Calls a function after a specified amount of time. Returns timer ID reference.} 
    code [block!] 
    timeout [number! time!] 
    /repeat "Periodically repeat the function." 
    /local t id 
][ 
    t: now/precise 
    if number? timeout [timeout: to time! timeout] 
    sort/skip/compare append guie/timers compose/deep/only [(id: guie/timer-id: guie/timer-id + 1) [ 
     timeout (t + timeout) 
     rate (all [ 
       repeat 
       max 0:00 timeout 
      ]) 
     callback (function [] code) 
    ]] 2 2 
    guie/timeout: true 
    id 
    ] 
] 

, если таймер все еще идет, он будет в объекте guie.

>> guie/timers 
== [] 

>> set-timer [print "done"] 2 
== 5 

>> guie/timers 
== [5 [ 
    timeout 11-Aug-2013/22:41:13.381-5:00 
    rate none 
    callback make function! [[ 
     /local 
    ][print "done"]] 
]] 

И получать значение даты будет выглядеть следующим образом:

second select guie/timers timer-id 
>>b: second select guie/timers 5 
==11-Aug-2013/22:41:13.381-5:00 
>>c: now/time - b/time 
== 0:0:55 

Если таймер закончил, сделай события очищает его. Если события не выполняются, таймер останется даже после истечения времени.