awips2/cotsSource/org.apache.qpid/ruby/lib/qpid/util.rb
root 9bb8decbcf Initial revision of AWIPS2 11.9.0-7p5
Former-commit-id: 133dc97f67 [formerly a02aeb236c] [formerly 9f19e3f712] [formerly 06a8b51d6d [formerly 9f19e3f712 [formerly 64fa9254b946eae7e61bbc3f513b7c3696c4f54f]]]
Former-commit-id: 06a8b51d6d
Former-commit-id: 377dcd10b9 [formerly 3360eb6c5f]
Former-commit-id: 8e80217e59
2012-01-06 08:55:05 -06:00

75 lines
1.8 KiB
Ruby

#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
require 'thread'
require 'monitor'
# Monkeypatch
class MonitorMixin::ConditionVariable
# Wait until BLOCK returns TRUE or TIMEOUT seconds have passed
# Return TRUE if BLOCK returned TRUE within the TIMEOUT, FALSE
# otherswise
def wait_for(timeout=nil, &block)
start = Time.now
passed = 0
until yield
if timeout.nil?
wait
elsif passed < timeout
wait(timeout)
else
return false
end
passed = Time.now - start
end
return true
end
end
module Qpid::Util
# Similar to Python's threading.Event
class Event
def initialize
@monitor = Monitor.new
@cond = @monitor.new_cond
@set = false
end
def set
@monitor.synchronize do
@set = true
@cond.signal
end
end
def clear
@monitor.synchronize { @set = false }
end
def wait(timeout = nil)
@monitor.synchronize do
unless @set
@cond.wait_for(timeout) { @set }
end
end
end
end
end