module AwesomeExplain::Queue
def pop(blocking = true, timeout = nil) @mutex.synchronize do if blocking if timeout.nil? while @elems.empty? @cond_var.wait(@mutex) end else timeout_time = Time.now.to_f + timeout while @elems.empty? && (remaining_time = timeout_time - Time.now.to_f) > 0 @cond_var.wait(@mutex, remaining_time) end end end raise ThreadError, 'queue empty' if @elems.empty? sleep 1 @elems.shift end end end
end