[#42243] コミュニティと宗教の分離について — Beyond <beyond@...>

14 messages 2006/05/21

[#42267] メニューのループについて — リックス <rubyer4649@...>

りっくすです

21 messages 2006/05/27

[#42301] Re: メニューのループについて — "conundrum /" <conundrum@...>

conundrumです。

11 messages 2006/05/28

[ruby-list:42178] Re: RS232Cによるパソコン間の通信の不具合(質問)

From: "Hisashi Yahata" <yahatah@...>
Date: 2006-05-01 07:08:38 UTC
List: ruby-list #42178
青木さん、木村さん、回答を有り難うございました。

> キー入力を拾ってそのときだけ表示したいという意図は、明示された
> タイミング以外のデータは捨てたいということですよね?
そのとおりです。

> それなら、シリアル入力をポーリングする部分はスレッドにしてしまって
> 常時最新の値を保持するようにして、キー入力があったときにその値を
> 拾ってくるようにしてはいかがでしょう?
仰るとおりだと思います。スレッドの利用技術は未修得ですので、勉強して解決法を
探ります。
今の私が実現できる対応策は、毎回、Runすれば、最新計測データを得られるので、
これをファイルにappendにすれば正しく記録できます。
格好はよくないですが。

木村さんの説明の「flushはバッファにたまっているものを吐き出させるものであっ
て、破棄させるものではありません。」を理解しました。
すなわち、flushしても、バッファには溜まったままで、これからデータを読み込め
ば、やはり古いデータから読み込むのは避けられないということですね。
その場合、mainでもflushして、データを読み込み続けておいて、そして最新の値を
記録すれば、よいのかとも思いますが。これで解決できるかやってみます。

> #わたしはこの方法でシリアル接続のシーケンサを制御してます。
> 具体的なコードは手元に環境がないのでパスってことで^^;
スレッドの利用について、よろしかったら、コードを教えてください。

なお、下記のスクリプトを検討していると、次のような問題があります。
1   print "input = \n""の命令がありながら、この命令がすぐに実行されませ
ん。
   キーを入力すると、後からinput = が表示されます。この原因は何でしょう
か。
  p "input ="であれば、すぐに実行します。この場合に、” ”を消すことがで
きないので具合が悪いです。
  キー入力を促すことが目的ですが、スクリプトどおりに動作しないのは気になり
ます。

2 print "input = " のように同一行で入力を促す方法はどうすればよいのでしょ
うか。

3 文字を入力すると、ベルが鳴りますが、何故でしょうか。enterキーを押した場
合は、鳴りません。
  たぶん、  p chrtにおいて、ベル命令(\a)が含まれたためでしょうが、何故含ま
れるのでしょうか。

4 enterキーのみ押したことを認識させたいのですが、この命令では、rの内容は、
前のデータが保持されたままです。
  これをうまく処理する方法はあるでしょうか。

5 キーの一つだけを押しただけで、entreキーを押さなくても、キー入力が認識さ
れるには、どのようなスクリプトが考えられますか。

例題
while (1)
 print "input = \n"
r=STDIN.sysread(2).chomp
# r=STDIN.readline.chomp
p r
break if r == "" or r == nil
end
__END__
t
input =
"t"
s
input =
"s"



In This Thread