## $Id$
## Copyright (C) 2004 NABEYA Kenichi (aka nanami@2ch)
-## Copyright (C) 2007-2008 Daigo Moriwaki (daigo at debian dot org)
+## Copyright (C) 2007-2012 Daigo Moriwaki (daigo at debian dot org)
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
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