NSMutableData からの NSInputStream 読み取りで NSStreamEventEndEncountered を通知する方法

StackOverflow https://stackoverflow.com/questions/781448

質問

Cocoa では、プロデューサとコンシューマの 2 つの NSThread をセットアップしました。プロデューサはデータを NSMutableData に追加し、レシーバはそのデータから NSInputStream を開いてチャンクを読み取ります。

プロデューサ スレッドはコンシューマ プロセスよりもはるかに高速に書き込みますが、これは問題ありません。しかし、プロデューサーは限られた量の仕事を生産するだけで、その後終了します。コンシューマ スレッドで NSStreamEventEndEncountered イベントを処理できるようにしたいと考えています。NSInputStream が NSMutableData からのものである場合、これをどのように通知すればよいでしょうか?

プロデューサーに、ストリームの終了を示す魔法の番号を含む一連のバイトを送信させるだけでよいでしょうか?

役に立ちましたか?

解決

プロデューサはデータを NSMutableData に追加し、レシーバはそのデータから NSInputStream を開いてチャンクを読み取ります。

それはうまくいきません。から -initWithData: ドキュメンテーション:

の内容 data コピーされます。

つまり、データを追加するときにデータ オブジェクトの内容に従うのではなく、その時点でデータ オブジェクト内にあるものをコピーします。

(同じことが当てはまります +inputStreamWithData:.)

試してみてください パイプ その代わり。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top