class Timers::Group
Attributes
Scheduled events:
Paused timers:
Active timers:
Public Class Methods
# File lib/timers/group.rb, line 16 def initialize @events = Events.new @timers = Set.new @paused_timers = Set.new @interval = Hitimes::Interval.new @interval.start end
Public Instance Methods
Call the given block after the given interval. The first argument will be the time at which the group was asked to fire timers for.
# File lib/timers/group.rb, line 37 def after(interval, &block) Timer.new(self, interval, false, &block) end
Cancel all timers.
# File lib/timers/group.rb, line 107 def cancel @timers.dup.each do |timer| timer.cancel end end
The group’s current time.
# File lib/timers/group.rb, line 114 def current_offset @interval.to_f end
Delay all timers.
# File lib/timers/group.rb, line 100 def delay(seconds) @timers.each do |timer| timer.delay(seconds) end end
Call the given block periodically at the given interval. The first argument will be the time at which the group was asked to fire timers for.
# File lib/timers/group.rb, line 43 def every(interval, recur = true, &block) Timer.new(self, interval, recur, &block) end
Fire all timers that are ready.
# File lib/timers/group.rb, line 79 def fire(offset = self.current_offset) @events.fire(offset) end
Pause all timers.
# File lib/timers/group.rb, line 84 def pause @timers.dup.each do |timer| timer.pause end end
Resume all timers.
# File lib/timers/group.rb, line 91 def resume @paused_timers.dup.each do |timer| timer.resume end end
Wait
for the next timer and fire it. Can take a block, which should behave like sleep(n), except that n may be nil (sleep forever) or a negative number (fire immediately after return).
# File lib/timers/group.rb, line 50 def wait(&block) if block_given? yield wait_interval while interval = wait_interval and interval > 0 yield interval end else while interval = wait_interval and interval > 0 # We cannot assume that sleep will wait for the specified time, it might be +/- a bit. sleep interval end end fire end
Interval to wait until when the next timer will fire.
-
nil: no timers
-
-ve: timers expired already
-
0: timers ready to fire
-
+ve: timers waiting to fire
# File lib/timers/group.rb, line 72 def wait_interval(offset = self.current_offset) if handle = @events.first return handle.time - Float(offset) end end