From: "Simon Kröger" <Simo...@gmx.de>
-------------------------------
$stdout.sync = true
rd, wr = IO.pipe
Thread.new do
loop do
puts 'foo!'
sleep 0.5
end
end
sleep 2
puts(rd.gets)
-------------------------------
ruby 1.8.4 (2005-12-24) [i386-mswin32]
gives me 4 foo!s and waits for the rest of eternity.
So blocking on a pipe isn't an option for platform independent code.
(or am I doing something wrong, please say I'm doing something wrong!)
As far as I know, on mswin32 ruby, the only genuine nonblocking
I/O is with sockets.
I, too, have need to wake up a ruby thread from a native thread
in my application. Currently I'm using polling.
My thinking was to use UDP over loopback. My ruby thread would
sleep waiting for the C thread to send it a UDP packet.
I haven't tried this yet. I'm certain it would work, technically,
but I'm wary of it because I've had experiences in the past where
simply creating a socket (even on localhost) causes the user's
computer to decide to take the modem off-hook and try to connect
to their AOL account... :rolleyes:
(This was about six years ago. I'm not sure if Windows still
behaves like that with dialup connections or not.)
Regards,
Bill