Diff of /SharedMemoryWinCSharp/Program.cs [000000] .. [r1]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/SharedMemoryWinCSharp/Program.cs
@@ -0,0 +1,66 @@
+using System;
+using System.IO.MemoryMappedFiles;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace SharedMemoryWin
+{
+
+    // Example structure for data exchange
+    internal struct DataExchange
+    {
+        internal Int32 i1;
+        internal Int32 i2;
+    }
+
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            DataExchange dataExchangeRead, dataExchangeWrite;            
+            dataExchangeWrite.i1 = 0;
+            dataExchangeWrite.i2 = 0;
+            
+            Console.Out.WriteLine("Press 'q' to quit");
+
+            int dataSIze = Marshal.SizeOf(typeof(DataExchange));
+            
+            // Open a mapped file with read access and one with write access. 
+            using (var mmfRead = MemoryMappedFile.CreateOrOpen("_CODESYS_SharedMemoryTest_Write", dataSIze))
+            using (var mmfWrite = MemoryMappedFile.CreateOrOpen("_CODESYS_SharedMemoryTest_Read", dataSIze))
+            {
+                bool quit = false;
+                while (!quit)
+                {
+                    using (var accessorRead = mmfRead.CreateViewAccessor(0, dataSIze, MemoryMappedFileAccess.Read))
+                    using (var accessorWrite = mmfWrite.CreateViewAccessor(0, dataSIze, MemoryMappedFileAccess.Write))
+                    {
+                        // Read the structure
+                        accessorRead.Read(0, out dataExchangeRead);
+                        // Write the structure
+                        accessorWrite.Write(0, ref dataExchangeWrite);
+
+                        // Display the values
+                        Console.Out.Write("Read i1: {0} i2: {1}       Write i1: {2} i2: {3}\r",
+                                            dataExchangeRead.i1,
+                                            dataExchangeRead.i2,
+                                            dataExchangeWrite.i1,
+                                            dataExchangeWrite.i2);
+
+                        // Wait a second
+                        Thread.Sleep(1000);
+
+                        // Increment sample values
+                        dataExchangeWrite.i1++;
+                        dataExchangeWrite.i2--;
+
+                        // Check quit condition
+                        if(Console.KeyAvailable)
+                            if (Console.ReadKey().KeyChar == 'q')         
+                                quit = true;
+                    }
+                }
+            }
+        }
+    }
+}