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