From: "Simon Kr÷šer" <SimonKroeger / 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