class Lounger
Constants
- SIGNALS
- VERSION
Public Class Methods
idle()
click to toggle source
# File lib/lounger.rb, line 53 def self.idle Lounger.new.idle end
new(include_signals: [], exclude_signals: [])
click to toggle source
# File lib/lounger.rb, line 6 def initialize(include_signals: [], exclude_signals: []) @lock = Mutex.new @condition = ConditionVariable.new @pending_signals = 0 @buffer = [] @idle = false (SIGNALS + include_signals - exclude_signals).each do |s| prev = Signal.trap(s) do @condition.signal prev.call unless prev.is_a?(String) end end end
Public Instance Methods
idle(ignore_pending: false)
click to toggle source
# File lib/lounger.rb, line 21 def idle(ignore_pending: false) result = nil @lock.synchronize do @pending_signals = 0 if ignore_pending @idle = true if @pending_signals > 0 @pending_signals -= 1 else @condition.wait(@lock) @pending_signals -= 1 end @idle = false result = @buffer.shift end return result end
Also aliased as: wait
idle?()
click to toggle source
# File lib/lounger.rb, line 41 def idle? return @idle end
Also aliased as: waiting?
wakeup!(value = nil)
click to toggle source
# File lib/lounger.rb, line 45 def wakeup!(value = nil) @lock.synchronize do @pending_signals += 1 @buffer << value @condition.signal end end
Also aliased as: signal