Class: Threadz::Sleeper

Inherits:
Object
  • Object
show all
Defined in:
lib/threadz/sleeper.rb

Instance Method Summary collapse

Constructor Details

#initializeSleeper

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

#broadcastObject



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

#signalObject



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