Class: MPV::MultiQueue::Reader

Inherits:
Object
  • Object
show all
Defined in:
lib/mpv_ipc/multi_queue.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#idObject (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

#closeObject

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.

Parameters:

  • timeout (Numeric) (defaults to: @timeout)

    optional (non-default) timeout in seconds

Returns:

  • (Object)

    the value

Raises:



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