2016-08-31 7 views
2

StringIO類似のクラスを探していて、プログラムのさまざまな部分から同時に読み書きすることができます。
バッファーに文字を書き込む(追加する)プログラムの部分から、読みたい別の部分からバッファーに書きたい。Ruby StringIO同時読み書き用

たStringIOの問題点は以下の通りです:

buffer = StringIO.new 
buffer.write "Foobar"  # Write to the buffer 
buffer.rewind    # Move the pointer to beginning 
buffer.getc    #=> F 
buffer.getc    #=> o 

buffer.write("something") # Write more to the buffer 
buffer.string    #=> Fosomething 
buffer.getc    #=> nil 
buffer.pos     #=> 11 

私は、バッファに書き込むたびに、それが現在の位置に書き込まれます。最後に、その位置が最後に書き込まれた文字に移動します。

私が必要とするのは、読み書きのための2つの別個の位置を持つStringBufferです。このようなことがルビーに存在するのでしょうか、それとも私自身でやらなくてはなりませんか?

+0

スレッド間で共有変数を変更することは、MRIでは非決定論的です。 – Anthony

答えて

1

Queueを使用することを検討する必要があります。スレッドの安全性が必要ない場合は、単純な配列でも問題ありません。

+0

キューを使用することは良い考えです。私はそれを試みます。 – 0xAffe

+0

私はこの答えを受け入れるでしょう。それは他の人にとっては良い方法かもしれないから、それは私にとってはうまくいきませんでした。私は通訳をしており、時には通訳がより多くの情報を期待しています。その場合は、ユーザーに入力を求めるだけです。キューが空の場合、読み取りスレッドが消滅するため、キューが機能しませんでした。 – 0xAffe

関連する問題