Class: SystemTimer::ConcurrentTimerPool
- Inherits:
-
Object
- Object
- SystemTimer::ConcurrentTimerPool
- Defined in:
- lib/system_timer/concurrent_timer_pool.rb
Instance Method Summary collapse
- #add_timer(interval_in_seconds) ⇒ Object
- #cancel(registered_timer) ⇒ Object
- #first_timer? ⇒ Boolean
-
#log_registered_timers ⇒ Object
:nodoc:.
-
#log_timeout_received(thread_timer) ⇒ Object
:nodoc:.
- #next_expired_timer(now_in_seconds_since_epoch) ⇒ Object
- #next_timer ⇒ Object
- #next_trigger_interval_in_seconds ⇒ Object
- #next_trigger_time ⇒ Object
- #register_timer(trigger_time, thread) ⇒ Object
- #registered_timers ⇒ Object
- #trigger_next_expired_timer ⇒ Object
- #trigger_next_expired_timer_at(now_in_seconds_since_epoch) ⇒ Object
Instance Method Details
#add_timer(interval_in_seconds) ⇒ Object
17 18 19 20 21 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 17 def add_timer(interval_in_seconds) new_timer = register_timer(Time.now.to_i + interval_in_seconds, Thread.current) log_registered_timers if SystemTimer.debug_enabled? new_timer end |
#cancel(registered_timer) ⇒ Object
23 24 25 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 23 def cancel(registered_timer) registered_timers.delete registered_timer end |
#first_timer? ⇒ Boolean
27 28 29 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 27 def first_timer? registered_timers.size == 1 end |
#log_registered_timers ⇒ Object
:nodoc:
75 76 77 78 79 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 75 def log_registered_timers #:nodoc: puts <<-EOS Registered Timers: #{registered_timers.collect do |t| t.to_s end} EOS end |
#log_timeout_received(thread_timer) ⇒ Object
:nodoc:
65 66 67 68 69 70 71 72 73 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 65 def log_timeout_received(thread_timer) #:nodoc: puts <<-EOS ==== Triger Timer ==== #{thread_timer} Main thread : #{Thread.main} Timed_thread : #{thread_timer.thread} All Threads : #{Thread.list.inspect} EOS log_registered_timers end |
#next_expired_timer(now_in_seconds_since_epoch) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 45 def next_expired_timer(now_in_seconds_since_epoch) candidate_timer = next_timer return nil if candidate_timer.nil? || candidate_timer.trigger_time > now_in_seconds_since_epoch candidate_timer end |
#next_timer ⇒ Object
31 32 33 |
# 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 ⇒ Object
40 41 42 43 |
# 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_i)].max unless timer.nil? end |
#next_trigger_time ⇒ Object
35 36 37 38 |
# 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) ⇒ Object
11 12 13 14 15 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 11 def register_timer(trigger_time, thread) new_timer = ThreadTimer.new(trigger_time, thread) registered_timers << new_timer new_timer end |
#registered_timers ⇒ Object
7 8 9 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 7 def registered_timers @timers ||= [] end |
#trigger_next_expired_timer ⇒ Object
61 62 63 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 61 def trigger_next_expired_timer trigger_next_expired_timer_at Time.now.to_i end |
#trigger_next_expired_timer_at(now_in_seconds_since_epoch) ⇒ Object
52 53 54 55 56 57 58 59 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 52 def trigger_next_expired_timer_at(now_in_seconds_since_epoch) timer = next_expired_timer(now_in_seconds_since_epoch) return if timer.nil? cancel timer log_timeout_received(timer) if SystemTimer.debug_enabled? timer.thread.raise Timeout::Error.new("time's up!") end |