Как мне получить доступ к значению таймера после его установки?

Учитывая приведенный ниже код 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 очищает его. Если события не выполняются, таймер останется даже после истечения времени.

Другие вопросы по тегам