Class: TimedQueue

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

Instance Method Summary collapse

Constructor Details

#initialize(size = 0) ⇒ TimedQueue

Returns a new instance of TimedQueue.



5
6
7
8
9
# File 'lib/timed_queue.rb', line 5

def initialize(size = 0)
  @que = Array.new(size) { yield }
  @mutex = Mutex.new
  @resource = ConditionVariable.new
end

Instance Method Details

#clearObject



35
36
37
# File 'lib/timed_queue.rb', line 35

def clear
  @que.clear
end

#empty?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/timed_queue.rb', line 31

def empty?
  @que.empty?
end

#lengthObject



39
40
41
# File 'lib/timed_queue.rb', line 39

def length
  @que.length
end

#push(obj) ⇒ Object Also known as: <<



11
12
13
14
15
16
# File 'lib/timed_queue.rb', line 11

def push(obj)
  @mutex.synchronize do
    @que.push obj
    @resource.broadcast
  end
end

#timed_pop(timeout = 0.5) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/timed_queue.rb', line 19

def timed_pop(timeout=0.5)
  deadline = Time.now + timeout
  @mutex.synchronize do
    loop do
      return @que.shift unless @que.empty?
      to_wait = deadline - Time.now
      raise Timeout::Error, "Waited #{timeout} sec" if to_wait <= 0
      @resource.wait(@mutex, to_wait)
    end
  end
end