Sha256: fe9fe41cdd69b3931216cf52c7b3c08e5f341f0ffd265c8b7fbc331450c320db

Contents?: true

Size: 822 Bytes

Versions: 1

Compression:

Stored size: 822 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

1 entries across 1 versions & 1 rubygems

Version Path
knjrbfw-0.0.8 lib/knj/thread2.rb