Beispiel #1
0
        public static void CreatePipe(long capacity, out Stream input, out Stream output)
        {
            using (DisposableStack insurance = new DisposableStack(3))
            {
                Flute  flute  = insurance.Add(new Flute(capacity));
                Stream writer = insurance.Add(flute.AcquireWriter(0, capacity));
                Stream reader = insurance.Add(flute.AcquireReader(0, capacity));

                DisposableStream disposableOutput = new DisposableStream(reader);
                disposableOutput.AfterDispose.Add(flute);
                disposableOutput.AfterDispose.Add(writer);

                input  = writer;
                output = disposableOutput;

                insurance.Clear();
            }
        }
Beispiel #2
0
 public FluteWriter(Flute flute, long offset = 0, long size = 0)
 {
     _flute = flute;
     _output = _flute._mmf.CreateViewStream(offset, size, MemoryMappedFileAccess.Write);
     Interlocked.Increment(ref _flute._writers);
 }
Beispiel #3
0
 public FluteReader(Flute flute, long offset = 0, long size = 0)
 {
     _flute = flute;
     _input = _flute._mmf.CreateViewStream(offset, size, MemoryMappedFileAccess.Read);
     Interlocked.Increment(ref _flute._readers);
 }