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, exception_class = nil) ⇒ 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, exception_class = nil) ⇒ 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, exception_class = nil) ⇒ Object
17 18 19 20 21 |
# 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) ⇒ 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:
81 82 83 84 85 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 81 def log_registered_timers #:nodoc: puts <<-EOS Registered Timers: #{registered_timers.map {|t| t.to_s}.join("\n ")} EOS end |
#log_timeout_received(thread_timer) ⇒ Object
:nodoc:
71 72 73 74 75 76 77 78 79 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 71 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 51 52 53 54 |
# 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 ⇒ 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_f)].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, exception_class = nil) ⇒ Object
11 12 13 14 15 |
# 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 ⇒ Object
7 8 9 |
# File 'lib/system_timer/concurrent_timer_pool.rb', line 7 def registered_timers @timers ||= [] end |
#trigger_next_expired_timer ⇒ Object
66 67 68 69 |
# 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) ⇒ Object
56 57 58 59 60 61 62 63 64 |
# 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 |