equal
deleted
inserted
replaced
48 } |
48 } |
49 |
49 |
50 |
50 |
51 /* delayed events */ |
51 /* delayed events */ |
52 |
52 |
53 final class Delay private[Standard_Thread](first: Boolean, delay: => Time, event: => Unit) |
53 final class Delay private[Standard_Thread]( |
|
54 first: Boolean, delay: => Time, log: Logger, event: => Unit) |
54 { |
55 { |
55 private var running: Option[Event_Timer.Request] = None |
56 private var running: Option[Event_Timer.Request] = None |
56 |
57 |
57 private def run: Unit = |
58 private def run: Unit = |
58 { |
59 { |
59 val do_run = synchronized { |
60 val do_run = synchronized { |
60 if (running.isDefined) { running = None; true } else false |
61 if (running.isDefined) { running = None; true } else false |
61 } |
62 } |
62 if (do_run) event |
63 if (do_run) { |
|
64 try { event } |
|
65 catch { case exn: Throwable if !Exn.is_interrupt(exn) => log(Exn.message(exn)); throw exn } |
|
66 } |
63 } |
67 } |
64 |
68 |
65 def invoke(): Unit = synchronized |
69 def invoke(): Unit = synchronized |
66 { |
70 { |
67 val new_run = |
71 val new_run = |
93 } |
97 } |
94 } |
98 } |
95 } |
99 } |
96 |
100 |
97 // delayed event after first invocation |
101 // delayed event after first invocation |
98 def delay_first(delay: => Time)(event: => Unit): Delay = new Delay(true, delay, event) |
102 def delay_first(delay: => Time, log: Logger = No_Logger)(event: => Unit): Delay = |
|
103 new Delay(true, delay, log, event) |
99 |
104 |
100 // delayed event after last invocation |
105 // delayed event after last invocation |
101 def delay_last(delay: => Time)(event: => Unit): Delay = new Delay(false, delay, event) |
106 def delay_last(delay: => Time, log: Logger = No_Logger)(event: => Unit): Delay = |
|
107 new Delay(false, delay, log, event) |
102 } |
108 } |