class SystemTimer::ConcurrentTimerPool

Public Instance Methods

add_timer(interval_in_seconds, exception_class=nil) click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 17
def add_timer(interval_in_seconds, exception_class=nil)
  new_timer = register_timer(Time.now.to_f + interval_in_seconds, Thread.current, exception_class)
  log_registered_timers if SystemTimer.debug_enabled?
  new_timer
end
cancel(registered_timer) click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 23
def cancel(registered_timer)
  registered_timers.delete registered_timer
end
first_timer?() click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 27
def first_timer?
  registered_timers.size == 1
end
next_expired_timer(now_in_seconds_since_epoch) click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 45
def next_expired_timer(now_in_seconds_since_epoch)
  candidate_timer = next_timer
  if SystemTimer.debug_enabled?
    puts "Candidate timer at #{now_in_seconds_since_epoch} : " +
         candidate_timer.inspect
  end
  return nil if candidate_timer.nil? || 
                candidate_timer.trigger_time > now_in_seconds_since_epoch
  candidate_timer
end
next_timer() click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 31
def next_timer
  registered_timers.sort {|x,y| x.trigger_time <=> y.trigger_time}.first
end
next_trigger_interval_in_seconds() click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 40
def next_trigger_interval_in_seconds
  timer = next_timer
  [0, (timer.trigger_time - Time.now.to_f)].max unless timer.nil?
end
next_trigger_time() click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 35
def next_trigger_time
  timer = next_timer
  timer.trigger_time unless timer.nil?
end
register_timer(trigger_time, thread, exception_class=nil) click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 11
def register_timer(trigger_time, thread, exception_class=nil)
  new_timer = ThreadTimer.new(trigger_time, thread, exception_class)
  registered_timers << new_timer
  new_timer
end
registered_timers() click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 7
def registered_timers
  @timers ||= []
end
trigger_next_expired_timer() click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 66
def trigger_next_expired_timer
  puts "Trigger next expired timer" if SystemTimer.debug_enabled?
  trigger_next_expired_timer_at Time.now.to_f
end
trigger_next_expired_timer_at(now_in_seconds_since_epoch) click to toggle source
# File lib/system_timer/concurrent_timer_pool.rb, line 56
def trigger_next_expired_timer_at(now_in_seconds_since_epoch)
  timer = next_expired_timer(now_in_seconds_since_epoch)
  puts "Next expired timer : #{timer.inspect}" if SystemTimer.debug_enabled?
  return if timer.nil?

  cancel timer
  log_timeout_received(timer) if SystemTimer.debug_enabled?
  timer.thread.raise timer.exception_class.new("time's up!")
end