青木@ナセ工企です。

> ところが、run後に任意の時間に、計測を繰り返し、計測値を表示記録させる目的
>で、while〜endを利用して、繰り返し計測をしようとすると、問題が発生します。
>chr = STDIN.getcによって、キー入力文字をchrで判定して、(例えばenterキーを押
>したときのみ) 計測を行うようにしたところ、enterキーを押したときに、計測内
>容は、古い計測値を示します。すなわち、数10回も以前に取得した計測値が、読み
>込まれているらしく、これを表示するので、enterキーを押した直後の計測値を表示
>しません。
> これでは、使い物になりません。この原因は、bufferにデータが貯まるためと思わ
>れます。このとき、sysread(1)やport.flush等を入れても、効果がありません。
矢幡さんの解決スキームとは異なりますが、一案。
キー入力を拾ってそのときだけ表示したいという意図は、明示された
タイミング以外のデータは捨てたいということですよね?
それなら、シリアル入力をポーリングする部分はスレッドにしてしまって
常時最新の値を保持するようにして、キー入力があったときにその値を
拾ってくるようにしてはいかがでしょう?
#わたしはこの方法でシリアル接続のシーケンサを制御してます。

具体的なコードは手元に環境がないのでパスってことで^^;

------------------------------------------------------------
東京大学大学院工学系研究科 / (有)ナセ工企  青木 茂
            mailto:saoki / yk.rim.or.jp
            mailto:aoki / bridge.t.u-tokyo.ac.jp
            mailto:shig / nasekouki.co.jp