2016-10-13 5 views
1

Ich versuche, Anwendung A ein Byte-Array in einen Memory Mapped Stream schreiben, Anwendung B liest dann dieses Stück Speicher. Ich habe den Punkt erreicht, an dem sie lesen und schreiben können, aber das Problem ist, dass ich keine Anwendung B bekommen kann, die darauf wartet, dass neue Daten ankommen. Im Moment liest sie einfach so schnell wie möglich.Speicher gemappter Stream - Warten auf Daten

Nach einer Suche für ein bisschen habe ich herausgefunden, dass Sie einen Rückruf an MemoryMappedStream.BeginRead zuweisen können, aber ich bin unsicher, wie dieser Rückruf verwendet wird, um auf neue Daten aus dem Stream zu warten. Wie würde man einen Rückruf für diese Art von Situation machen? Oder schaue ich in die falsche Richtung?

+0

http://stackoverflow.com/questions/30251443/how-to-read-and-write-a-file-using-memory-mapped-file-c könnte Ihnen helfen. –

+0

Sie könnten ein benanntes ['EventWaitHandle'] (https://msdn.microsoft.com/en-us/library/system.threading.eventwaithandle (v = vs.110) .aspx) als ein Signal für den konsumierenden Thread verwenden um es zu sagen, wenn die Daten vollständig geschrieben wurden. (Sie könnten auch ein anderes 'EventWaitHandle' für den konsumierenden Thread wünschen, um dem produzierenden Thread anzuzeigen, dass er die Daten verbraucht hat) –

+0

@MatthewWatson Sieht definitiv wie eine interessante Möglichkeit aus, danke für den Rat. –

Antwort

1

Dank MatthewWatson schaute ich in EvenWaitHandles und schaffte es, die Prozesse auf das Signal des jeweils anderen mit dem Einsatz von zwei AutoResetEvents warten. Einer von ihnen wird verwendet, um MemoryReadEventWaitHandle zu setzen, wenn das Lesen durchgeführt wird und der andere setzt MemoryWrittenEventWaitHandle, wenn das Schreiben abgeschlossen ist. Auf diese Weise werden sie sich nicht gegenseitig stören und die Aufgaben in der richtigen Reihenfolge ausführen.