Sha256: a7c76e3450772319a2585543edfe8a98edcf61e0fe195c5c32174d5e25e3dda4

Contents?: true

Size: 620 Bytes

Versions: 10

Compression:

Stored size: 620 Bytes

Contents

module Kraps
  class Interval
    include MonitorMixin

    def initialize(timeout, &block)
      super()

      @thread_queue = TimeoutQueue.new
      @main_queue = TimeoutQueue.new
      @stopped = false

      @thread = Thread.new do
        until @stopped
          item = @thread_queue.deq(timeout: timeout)

          block.call unless @stopped

          @main_queue.enq(1) if item
        end
      end
    end

    def fire(timeout:)
      @thread_queue.enq(1)
      @main_queue.deq(timeout: timeout)
    end

    def stop
      @stopped = true
      @thread_queue.enq(nil)
      @thread.join
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
kraps-0.10.0 lib/kraps/interval.rb
kraps-0.9.0 lib/kraps/interval.rb
kraps-0.8.0 lib/kraps/interval.rb
kraps-0.7.0 lib/kraps/interval.rb
kraps-0.6.0 lib/kraps/interval.rb
kraps-0.5.0 lib/kraps/interval.rb
kraps-0.4.0 lib/kraps/interval.rb
kraps-0.3.0 lib/kraps/interval.rb
kraps-0.2.0 lib/kraps/interval.rb
kraps-0.1.0 lib/kraps/interval.rb