2010-05-24 2 views
0

Я хочу вызвать будильник при запуске GUI. Я не могу понять, что эквивалентно событию загрузки другого языка в Vid Rebol, поэтому я помещаю его в периодический обработчик, который довольно круто. Итак, как сделать это более чисто?Более элегантный способ запуска многопоточного аварийного сигнала в Rebol VID? (Что эквивалентно событию загрузки?)

alarm-data: none 

set-alarm: func [ 
    "Set alarm for future time." 
    seconds "Seconds from now to ring alarm." 
    message [string! unset!] "Message to print on alarm." 
] [ 
    alarm-data: reduce [now/time + seconds message] 
] 

ring: func [ 
    "Action for when alarm comes due." 
    message [string! unset!] 
] [ 
    set-face monitor either message [message]["RIIIING!"] 
    ; Your sound playing can also go here (my computer doesn't have speakers). 
] 

periodic: func [ 
    "Called every second, checks alarms." 
    fact action event 
] [ 
    either alarm-data [ 
     ; Update alarm countdown. 
     set-face monitor rejoin [ 
      "Alarm will ring in " 
      to integer! alarm-data/1 - now/time 
      " seconds." 
     ] 

     ; Check alarm. 
     if now/time > alarm-data/1 [ 
      ring alarm-data/2 
      ;alarm-data: none ; Reset once fired. 
     ] 
    ][ 
     either value? 'message [ 
      set-alarm seconds message 
     ][ 
      set-alarm seconds "Alarm triggered!" 
     ]  
    ] 
] 

alarm: func[seconds message [string! unset!]][ 

    system/words/seconds: seconds 
    if value? 'message [ 
    system/words/message: message 
    ] 

    view layout [ 

     monitor: text 256 "" 

     rate 1 feel [engage: :periodic] 

     button 256 "re/start countdown" [ 
     either value? 'message [ 
      set-alarm seconds message 
     ][ 
      set-alarm seconds "Alarm triggered!" 
     ] 
     set-face monitor "Alarm set." 
     ] 

    ] 

] 

ответ

3

Если вопрос заключается в том, чтобы сделать что-то происходит, когда начинается графический интерфейс, вы можете сделать это

макет вид [ текст "Вот мой макет"

do [ 
    .... initialization code ...  
    ] 

]

+0

О, это так просто, я просто не видел его в доке, возможно, я пропустил его. –