class PulsarSdk::Tweaks::TimeoutQueue

Public Class Methods

new() click to toggle source
# File lib/pulsar_sdk/tweaks/timeout_queue.rb, line 4
def initialize
  @mutex = Mutex.new
  @queue = []
  @received = ConditionVariable.new
  @closed = false
end

Public Instance Methods

add(*args) click to toggle source
# File lib/pulsar_sdk/tweaks/timeout_queue.rb, line 11
def add(*args)
  @mutex.synchronize do
    @queue << args
    @received.signal
  end
end
clear() click to toggle source
# File lib/pulsar_sdk/tweaks/timeout_queue.rb, line 18
def clear
  @mutex.synchronize do
    @queue.clear
  end
end
close() click to toggle source
# File lib/pulsar_sdk/tweaks/timeout_queue.rb, line 46
def close
  @closed = true
  @received.broadcast
end
pop(timeout = nil) click to toggle source

timeout 数字,单位秒

# File lib/pulsar_sdk/tweaks/timeout_queue.rb, line 29
def pop(timeout = nil)
  @mutex.synchronize do
    if timeout.nil?
      while !@closed && @queue.empty?
        @received.wait(@mutex)
      end
    elsif @queue.empty? && timeout != 0
      timeout_at = TimeX.now.to_f + timeout
      while !@closed && @queue.empty? && (res = timeout_at - TimeX.now.to_f) > 0
        @received.wait(@mutex, res)
      end
    end

    @queue.pop
  end
end
size() click to toggle source
# File lib/pulsar_sdk/tweaks/timeout_queue.rb, line 24
def size
  @queue.size
end