class TimeoutQueue
def initialize(timeout=20)
- @timeout = 20 # sec
+ @timeout = timeout # sec
@queue = []
@mon = Monitor.new
@cond = @mon.new_cond
end
#
- # @return :timeout if timeout
+ # @return :timeout if it timed out
#
def deq
timeout_flg = false
- ret = nil
-
+ ret = :timeout
@mon.synchronize do
if @queue.empty?
- if @cond.wait(15)
+ unless @cond.wait(@timeout)
#timeout
timeout_flg = true
- ret = :timeout
end
end
if !timeout_flg && !@queue.empty?
end # synchronize
return ret
end
+
+ def empty?
+ ret = true
+ @mon.synchronize do
+ ret = @queue.empty?
+ end
+ return ret
+ end
+
+ def get_messages
+ ret = nil
+ @mon.synchronize do
+ ret = @queue.dup
+ end
+ return ret
+ end
+
end
end