2016-10-13 6 views
1

アプリケーションAがメモリマップされたストリームにバイト配列を書き込もうとしているとき、アプリケーションBがこのメモリを読み取ります。私は彼らが読んで書くことができるところにいるのですが、問題はアプリケーションBが新しいデータが到着するのを待つことができないということです。今はただちに読み込みます。メモリマップされたストリーム - データが到着するのを待つ

ビットを検索したところ、MemoryMappedStream.BeginReadにコールバックを割り当てることができましたが、このコールバックを使用してストリームから新しいデータを待つ方法がわかりません。このような状況に対して、どのようにコールバックを行うのでしょうか?または私は間違った方向を見ていますか?

+0

http://stackoverflow.com/questions/30251443/how-to-read-and-write-a-file-using-memory-mapped-file-cが役立つ可能性があります。 –

+0

消費スレッドへの信号として名前付き['EventWaitHandle'](https://msdn.microsoft.com/en-us/library/system.threading.eventwaithandle(v = vs.110).aspx)を使用できますデータが完全に書き込まれたときにそれを知らせる。 (消費スレッドが、データを消費したことを生産スレッドに示すために、別の 'EventWaitHandle'が必要な場合もあります) –

+0

@MatthewWatson間違いなく興味深い可能性があります。アドバイスありがとうございます。 –

答えて

1

MatthewWatsonのおかげで、私はEvenWaitHandlesを調べて、2つのAutoResetEventsを使用してお互いの信号を待つように処理しました。それらのうちの1つは、読み取りが実行されるときにはMemoryReadEventWaitHandleを設定するために使用され、書き込みが行われるときには、他のセットがMemoryWrittenEventWaitHandleに設定されます。このようにして、彼らは互いに干渉しないで、正しい順序でタスクを実行します。

関連する問題