2016-10-13 41 views
1

我試圖讓應用程序寫一個字節數組到內存映射流,應用程序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

@MthetheWWatson絕對看起來像一個有趣的可能性,感謝您的建議。 –

回答

1

感謝MatthewWatson,我查看了EvenWaitHandles,並設法使這兩個處理器使用兩個AutoResetEvents來等待對方的信號。其中一個用於在執行讀取時設置MemoryReadEventWaitHandle,另一個在寫入完成時設置MemoryWrittenEventWaitHandle。這樣他們就不會互相干擾,並按正確的順序執行任務。