Class: Rx::PeriodicScheduler::PeriodicTimer
- Inherits:
-
Object
- Object
- Rx::PeriodicScheduler::PeriodicTimer
- Defined in:
- lib/rx/concurrency/periodic_scheduler.rb
Overview
Internal timer
Instance Method Summary collapse
-
#initialize(seconds, &action) ⇒ PeriodicTimer
constructor
A new instance of PeriodicTimer.
- #run_loop ⇒ Object
- #time_block ⇒ Object
- #unsubscribe ⇒ Object
Constructor Details
#initialize(seconds, &action) ⇒ PeriodicTimer
Returns a new instance of PeriodicTimer.
38 39 40 41 42 43 44 |
# File 'lib/rx/concurrency/periodic_scheduler.rb', line 38 def initialize(seconds, &action) @seconds = seconds @unsubscribed = false @gate = Mutex.new self.run_loop(&action) end |
Instance Method Details
#run_loop ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/rx/concurrency/periodic_scheduler.rb', line 58 def run_loop Thread.new do should_run = true elapsed = 0 while should_run sleep @seconds - elapsed elapsed = time_block { yield } @gate.synchronize do should_run = !@unsubscribed end end end end |
#time_block ⇒ Object
52 53 54 55 56 |
# File 'lib/rx/concurrency/periodic_scheduler.rb', line 52 def time_block start_time = Time.new yield Time.new - start_time end |
#unsubscribe ⇒ Object
46 47 48 49 50 |
# File 'lib/rx/concurrency/periodic_scheduler.rb', line 46 def unsubscribe @gate.synchronize do @unsubscribed = true unless @unsubscribed end end |