Как мне получить доступ к значению таймера после его установки?
Учитывая приведенный ниже код R3-GUI, есть ли способ узнать, сколько времени осталось в таймере? ID таймера возвращается set-timer
но я не уверен, что я могу что-то сделать с этим?
set-timer [print "done"] 60
Другими словами, то, что я ищу в поддельном примере кода:
>> get-timer/time-remaining timer-id
== 0:0:21
1 ответ
Решение
Ответ можно найти, посмотрев на источник 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
Если таймер закончил, do-events очищает его. Если события не выполняются, таймер останется даже после истечения времени.