Class: Threadz::Sleeper
- Inherits:
-
Object
- Object
- Threadz::Sleeper
- Defined in:
- lib/threadz/sleeper.rb
Instance Method Summary collapse
- #broadcast ⇒ Object
-
#initialize ⇒ Sleeper
constructor
A new instance of Sleeper.
- #signal ⇒ Object
- #wait(timeout = 0) ⇒ Object
Constructor Details
#initialize ⇒ Sleeper
Returns a new instance of Sleeper.
6 7 8 |
# File 'lib/threadz/sleeper.rb', line 6 def initialize @waiters = Queue.new end |
Instance Method Details
#broadcast ⇒ Object
40 41 42 43 44 45 46 47 |
# File 'lib/threadz/sleeper.rb', line 40 def broadcast while !@waiters.empty? begin @waiters.pop(true).wakeup rescue ThreadError => e end end end |
#signal ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/threadz/sleeper.rb', line 30 def signal begin begin waiter = @waiters.pop(true) rescue ThreadError => e end end while waiter[:'__THREADZ_IS_SLEEPING'] waiter.wakeup if waiter end |
#wait(timeout = 0) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/threadz/sleeper.rb', line 10 def wait(timeout=0) if(timeout == nil || timeout <= 0) @waiters << Thread.current Thread.stop return true else begin @waiters << Thread.current status = Timeout::timeout(timeout) { Thread.current[:'__THREADZ_IS_SLEEPING'] = true Thread.stop Thread.current[:'__THREADZ_IS_SLEEPING'] = false } return true rescue Timeout::Error return false end end end |