Sha256: 0fed3e6607baa4c51e4e8bbd27c9f0f82f272ea21bff55b530570b47bdb209f7

Contents?: true

Size: 940 Bytes

Versions: 33

Compression:

Stored size: 940 Bytes

Contents

class Knj::Thread2
  def initialize(args = {}, &block)
    @args = args
    @block = block if block_given?
    @callbacks = {}
  end
  
  def connect(signal, &block)
    @callbacks[signal] = [] if !@callbacks.key?(signal)
    @callbacks[signal] << block
  end
  
  def call(signal, *args)
    return false if !@callbacks.key?(signal)
    @callbacks[signal].each do |block|
      block.call(*args)
    end
    
    return {:count => count}
  end
  
  def run
    Thread.new do
      abort_on_exception = true
      call(:on_run)
      
      begin
        @block.call
      rescue SystemExit
        call(:on_exit)
        exit
      rescue Exception => e
        call(:on_error, e)
        
        if !@args.key?(:print_error) or @args[:print_error]
          print "Error: "
          puts e.inspect
          print "\n"
          puts e.backtrace
          print "\n\n"
        end
      end
      
      call(:on_done)
    end
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
knjrbfw-0.0.41 lib/knj/thread2.rb
knjrbfw-0.0.40 lib/knj/thread2.rb
knjrbfw-0.0.39 lib/knj/thread2.rb
knjrbfw-0.0.38 lib/knj/thread2.rb
knjrbfw-0.0.37 lib/knj/thread2.rb
knjrbfw-0.0.36 lib/knj/thread2.rb
knjrbfw-0.0.35 lib/knj/thread2.rb
knjrbfw-0.0.34 lib/knj/thread2.rb
knjrbfw-0.0.33 lib/knj/thread2.rb
knjrbfw-0.0.32 lib/knj/thread2.rb
knjrbfw-0.0.31 lib/knj/thread2.rb
knjrbfw-0.0.30 lib/knj/thread2.rb
knjrbfw-0.0.29 lib/knj/thread2.rb
knjrbfw-0.0.28 lib/knj/thread2.rb
knjrbfw-0.0.27 lib/knj/thread2.rb
knjrbfw-0.0.26 lib/knj/thread2.rb
knjrbfw-0.0.25 lib/knj/thread2.rb
knjrbfw-0.0.24 lib/knj/thread2.rb
knjrbfw-0.0.23 lib/knj/thread2.rb
knjrbfw-0.0.22 lib/knj/thread2.rb