non-blocking gets in Windows

  • Thread starter Duckz King_duckz
  • Start date
D

Duckz King_duckz

Hello, I know this topic has already been discussed here a while ago,
but I was wondering if anyone came up with a workaround or something.
I'm trying to write a script that checks email every - say - 10 minutes,
while still accepting user's input, so that one can stop it.
This code works perfectly under linux:

def Prova1
running = true
th = Thread.new do
while running
inp = gets.chomp
running = false if ["QUIT", "EXIT"].include?(inp.upcase)
puts "Ho ricevuto \"#{inp}\"..."
end
end
until th.join(0.5)
puts "Attesa..."
sleep 1
end
nil
end

but if run under Windows, the whole script stops as soon as "gets" is
reached, as if it was single-threaded.
 
B

Bill Kelly

From: "Duckz King_duckz said:
but if run under Windows, the whole script stops as soon as "gets" is
reached, as if it was single-threaded.

I believe this works in ruby 1.9.1, now that native threads are used.

(I tested IO.popen on 1.9.1 on windows a few days ago, and finally all
of ruby is not blocked by a gets on the pipe. Yay!)

In ruby 1.8 and earlier, the trouble is that since ruby uses select() in
its thread scheduling, on windows, select() only works with sockets,
not other types of file handles. (I.e. windows is broken.)


Regards,

Bill
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,065
Latest member
OrderGreenAcreCBD

Latest Threads

Top