23 lines
634 B
Ruby
23 lines
634 B
Ruby
# frozen_string_literal: true
|
|
|
|
# EventLoop is an abstraction around Ruby's queue so that its usage is better
|
|
# understandable in our context.
|
|
class Runner::EventLoop
|
|
def initialize
|
|
@queue = Queue.new
|
|
end
|
|
|
|
# wait waits until another thread calls stop on this EventLoop.
|
|
# There may only be one active wait call per loop at a time, otherwise it is not
|
|
# deterministic which one will be unblocked if stop is called.
|
|
def wait
|
|
@queue.pop
|
|
end
|
|
|
|
# stop unblocks the currently active wait call. If there is none, the
|
|
# next call to wait will not be blocking.
|
|
def stop
|
|
@queue.push nil if @queue.empty?
|
|
end
|
|
end
|