Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env ruby
- #$ ruby better_select.rb
- #=> read2
- #=> end
- require 'thread'
- def better_select(reads, writes={}, excepts={}, timeout=nil)
- rs, ws, es = IO.select(reads.keys, writes.keys, excepts.keys, timeout)
- rs.each do |io|
- reads[io].call(io)
- end
- ws.each do |io|
- writes[io].call(io)
- end
- es.each do |io|
- excepts[io].call(io)
- end
- end
- q = Queue.new
- r, w = IO.pipe
- r2, w2 = IO.pipe
- Thread.new {
- better_select({
- r => ->(io) {
- puts "read1"
- q.push "end"
- },
- r2 => ->(io) {
- puts "read2"
- q.push "end"
- }
- })
- }.abort_on_exception = true
- w2.write("GO")
- w2.close
- puts q.pop
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement