こんにちは、なかむら(う)です。

In message "[ruby-dev:27077] select pipe support on native Win32"
    on Sep.14,2005 23:35:57, <usa / garbagecollect.jp> wrote:
| CVS trunk HEADに、native Win32なportでpipeのselectを可能とす
| るコードを入れてみました。

consoleのselectも可能になることがあるコードも入れてみました。

  Thread.new {
    loop {
      puts "thread"
      sleep 1
    }
  }
  loop {
    p gets
  }

のようなコードが、一見動いてるように見えるかもしれません。


これらのコードの既知の問題点は以下の通りです。

(1) pipe、consoleとも、書き込みは常に可能であるとみなしている。
    consoleはたぶんそれでよいが、pipeは2048バイトほど連続して
    書き込むとそこでブロックする。要修正。

(2) consoleに関しては、入力待ちに対して改行文字以外を入力した
    場合、改行文字が入力されるまで他のスレッドはブロックされる。
    これはCygwin版も同様で、Rubyのスレッドをネイティブスレッド
    にマッピングしない限りたぶん解決不能。

(3) Win9xではほとんどテストしてない。
    WindowsMeでちょびっとだけ動かしたけど、動くような気がする
    ことを確認した程度。

みなさま、気が向いたら弄ったり修正したりしてください。


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>