新井です。

In message "[ruby-list:36067] Re: Windows でThread"
  on 02 Oct 2002 12:12:26 +0900,
  WATANABE Hirofumi <eban / os.rim.or.jp> wrote:
> わたなべです。

> > っと、二種類示されているのですが、落とし穴に載っているのは前
> > 者のみです。しかも、「Cygwin と MinGW でダメ」っと落とし穴に
> > 書いているのですが、実際はどうなのでしょうか?
> > 
> > # 前に試して問題なかった覚えがあるんですよね。
> 
> たぶん誰かが勘違いしたんだと思います。

やっぱ、私が書いたような気がして来ました・・・(^^;

直すとすれば以下でしょうか?

| Win32版 ruby (cygwin、mingw、mswin32, bccwin32)では、以下も Thread
| の切替えが起こらないために timeout できません。
| 
|     # Win32ネイティブ版(mingw, mswin32, bccwin32)
| 
|     require 'timeout'
| 
|     begin
| 	timeout(5) do
| 	  $stdin.gets
| 	end
|     rescue TimeoutError
| 	print "timeout\n"
|     end
| 
|     # Cygwin版
| 
|     i = 0
|     begin
| 	timeout(5) do
| 	  while true
| 	      puts (i+=1)
| 	  end
| 	end
|     rescue TimeoutError
| 	print "timeout\n"
|     end
| 
| win32ネイティブ版では、$stdin.gets が、cygwin では、puts で 
| Thread の切替えを発生させないためです。

この説明だと、以下がちゃんとタイムアウトする理由が不明ではあ
ります。うーん、puts でダメな理由がいまいちわかってない。

require 'timeout'

i = 0
begin
  timeout(5) do
    while true
    end
  end
rescue TimeoutError
  print "timeout\n"
end

--
新井康司 (Koji Arai)