2016-10-13 2 views
1

J'essaie de faire en sorte que l'application A écrive un tableau d'octets dans un flux mappé en mémoire, l'application B lit alors cette partie de la mémoire. Je suis au point où ils peuvent lire et écrire mais le problème est que je ne peux pas obtenir l'application B pour attendre que de nouvelles données arrivent, pour le moment il lit juste aussi vite que possible. Après avoir cherché un peu, j'ai découvert que vous pouviez assigner un rappel à MemoryMappedStream.BeginRead mais je ne sais pas comment utiliser ce rappel pour attendre de nouvelles données du flux. Comment ferait-on un rappel pour ce genre de situation? Ou est-ce que je regarde dans la mauvaise direction?Flux mappé en mémoire - Attendre l'arrivée des données

+0

http://stackoverflow.com/questions/30251443/how-to-read-and-write-a-file-using-memory-mapped-file-c pourrait vous aider. –

+0

Vous pourriez utiliser un named ['EventWaitHandle'] (https://msdn.microsoft.com/en-us/library/system.threading.eventwaithandle (v = vs.110) .aspx) comme un signal au thread consommateur pour le dire quand les données ont été complètement écrites. (Vous pourriez aussi vouloir un autre 'EventWaitHandle' pour que le thread consommant indique au thread producteur qu'il a consommé les données) –

+0

@MatthewWatson Cela ressemble certainement à une possibilité intéressante, merci pour les conseils. –

Répondre

1

Merci à MatthewWatson J'ai regardé dans EvenWaitHandles et réussi à faire attendre les processen sur le signal de l'autre avec l'utilisation de deux AutoResetEvents. L'un d'entre eux est utilisé pour définir MemoryReadEventWaitHandle lorsque la lecture est effectuée et l'autre MemoryWrittenEventWaitHandle lorsque l'écriture est terminée. De cette façon, ils ne vont pas interférer les uns avec les autres et effectuer les tâches dans le bon ordre.