From: Masato Toyoshima Date: 2000-04-17T18:49:04+09:00 Subject: [ruby-list:21956] Thread & STDIN はじめまして、豊島といいます。 Ruby-1.4.3(Cygwin版) on windows2000 という環境で使わせていただいております。 今チャットクライアント的なものを作成中なのですが、 躓いております。 1. 標準入力から得た文字をTCPソケットに送る 2. TCPソケットから得たデータを随時表示する Threadを用いてみたのですが、標準入力から一文字でも入力すると 2の表示がストップしているようです。 エンターを入力すると一気に2のたまったデータが表示される感じです。 そこでもう少し簡単なケースでテストしてみました。 1. 標準入力から得たデータを表示する 2. 別スレッドで適当な文字を表示する これもなぜか上手く動きません。 timeoutを参考にして、試したのですが、どこが悪いか分からないでおります。 どうすれば、希望の形を実装できるでしょうか? ご教授いただけると幸いです。 ==以下テストコード require "thread" def timeout(sec) begin x = Thread.current y = Thread.start { sleep sec x.kill if x.status } yield sec return true ensure Thread.kill y if y.status end end z=Thread.start{ while true print "thread z" end } nstdin=nil nwrite=nil while true nstdin=nil timeout(1) do nstdin=STDIN.getc end case nstdin when nil pass when ?\n case nwrite when nil print "\n" else nwrite<<"\n" print nwrite nwrite=nil end else case nwrite when nil nwrite = nstdin.chr else nwrite << nstdin.chr end end end =========================================== ^^ ^^ mailto:mt@izu.co.jp ^^ ^^ ^^ ^^ ^^ 豊島 正登 Masato Toyoshima ^^ ^^