class MultiProcess::Loop

Public Class Methods

instance() click to toggle source
# File lib/multi_process/loop.rb, line 34
def instance
  @instance ||= new
end
new() click to toggle source
# File lib/multi_process/loop.rb, line 5
def initialize
  @selector = ::NIO::Selector.new

  Thread.new do
    loop do
      @selector.select(30.0) do |monitor|
        if monitor.io.eof?
          @selector.deregister(monitor.io)
          monitor.value.call(:eof, monitor)
        else
          monitor.value.call(:ready, monitor)
        end
      end

      # Wait very short time to allow scheduling another thread
      sleep(0.001)
    end
  end
end

Public Instance Methods

watch(io, &block) click to toggle source
# File lib/multi_process/loop.rb, line 25
def watch(io, &block)
  @selector.wakeup
  @selector.register(io, :r).tap do |monitor|
    monitor.value = block
    monitor.value.call(:registered, monitor)
  end
end