Class: MPV::MultiQueue::Reader
- Inherits:
-
Object
- Object
- MPV::MultiQueue::Reader
- Defined in:
- lib/mpv_ipc/multi_queue.rb
Instance Attribute Summary collapse
-
#id ⇒ Object
readonly
Returns the value of attribute id.
Instance Method Summary collapse
-
#close ⇒ Object
Closes this queue.
-
#initialize(table, id) ⇒ Reader
constructor
A new instance of Reader.
-
#pop(timeout = @timeout) ⇒ Object
Pops a value from this queue.
Constructor Details
#initialize(table, id) ⇒ Reader
Returns a new instance of Reader.
11 12 13 14 15 16 |
# File 'lib/mpv_ipc/multi_queue.rb', line 11 def initialize(table, id) table.instance_variables.each do |var| instance_variable_set(var, table.instance_variable_get(var)) end @mutex.synchronize{ @table[@id = id] ||= [] } end |
Instance Attribute Details
#id ⇒ Object (readonly)
Returns the value of attribute id.
9 10 11 |
# File 'lib/mpv_ipc/multi_queue.rb', line 9 def id @id end |
Instance Method Details
#close ⇒ Object
Closes this queue.
19 20 21 |
# File 'lib/mpv_ipc/multi_queue.rb', line 19 def close @mutex.synchronize{ @resource.broadcast if @table.delete(@id) } end |
#pop(timeout = @timeout) ⇒ Object
Pops a value from this queue.
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/mpv_ipc/multi_queue.rb', line 28 def pop(timeout=@timeout) @mutex.synchronize do deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + timeout if timeout while (queue = @table.fetch(@id)).empty? raise TimeoutError if timeout&.negative? @resource.wait(@mutex, timeout) timeout &&= deadline - Process.clock_gettime(Process::CLOCK_MONOTONIC) end queue.pop end end |