Class: Steep::Server::DelayQueue
- Defined in:
- lib/steep/server/delay_queue.rb
Instance Attribute Summary collapse
-
#delay ⇒ Object
readonly
Returns the value of attribute delay.
-
#last_task ⇒ Object
readonly
Returns the value of attribute last_task.
-
#queue ⇒ Object
readonly
Returns the value of attribute queue.
-
#thread ⇒ Object
readonly
Returns the value of attribute thread.
Instance Method Summary collapse
- #cancel ⇒ Object
- #execute(&block) ⇒ Object
-
#initialize(delay:) ⇒ DelayQueue
constructor
A new instance of DelayQueue.
Constructor Details
#initialize(delay:) ⇒ DelayQueue
Returns a new instance of DelayQueue.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/steep/server/delay_queue.rb', line 6 def initialize(delay:) @delay = delay @queue = Thread::Queue.new @thread = Thread.new do while (scheduled_at, proc = queue.pop) diff = scheduled_at - Time.now case when diff > 0.1 sleep diff when diff > 0 while Time.now < scheduled_at # nop sleep 0 end end if proc.equal?(last_task) unless @cancelled proc[] end end end end end |
Instance Attribute Details
#delay ⇒ Object (readonly)
Returns the value of attribute delay.
4 5 6 |
# File 'lib/steep/server/delay_queue.rb', line 4 def delay @delay end |
#last_task ⇒ Object (readonly)
Returns the value of attribute last_task.
4 5 6 |
# File 'lib/steep/server/delay_queue.rb', line 4 def last_task @last_task end |
#queue ⇒ Object (readonly)
Returns the value of attribute queue.
4 5 6 |
# File 'lib/steep/server/delay_queue.rb', line 4 def queue @queue end |
#thread ⇒ Object (readonly)
Returns the value of attribute thread.
4 5 6 |
# File 'lib/steep/server/delay_queue.rb', line 4 def thread @thread end |
Instance Method Details
#cancel ⇒ Object
33 34 35 36 |
# File 'lib/steep/server/delay_queue.rb', line 33 def cancel @cancelled = true queue.clear() end |
#execute(&block) ⇒ Object
38 39 40 41 42 |
# File 'lib/steep/server/delay_queue.rb', line 38 def execute(&block) @last_task = block scheduled_at = Time.now + delay queue << [scheduled_at, block] end |