示例#1
0
        protected Object ReadSharedMemory(Type T, string sharedMemoryFile)
        {
            Object data             = null;
            int    sharedMemorySize = Marshal.SizeOf(T);

            try
            {
                using (var mappedFile = MemoryMappedFile.OpenExisting(sharedMemoryFile))
                {
                    if (mappedFile == null)
                    {
                        return(null);
                    }

                    using (var memoryMappedViewStream = mappedFile.CreateViewStream())
                    {
                        if (memoryMappedViewStream == null)
                        {
                            return(null);
                        }

                        var buffer = ReadBuffer(memoryMappedViewStream, sharedMemorySize);
                        var alloc  = GCHandle.Alloc(buffer, GCHandleType.Pinned);
                        data = Marshal.PtrToStructure(alloc.AddrOfPinnedObject(), T);
                        memoryMappedViewStream.Close();
                        alloc.Free();
                    }
                }
            }
            catch
            {
            }
            return(data);
        }
示例#2
0
        void ReadTelemetry()
        {
            StartSending();

            Stopwatch sw = new Stopwatch();

            sw.Start();

            //read and process
            while (!IsStopped)
            {
                try
                {
                    double frameDT = 0;
                    while (true)
                    {
                        frameDT = sw.Elapsed.TotalSeconds;
                        if (frameDT >= (updateDelay / 1000.0f))
                        {
                            break;
                        }
                    }
                    sw.Restart();

                    data = (WRCData)ReadSharedMemory(typeof(WRCData), "Local\\WRC-8wSotWzFKAhBlbW10ZJBKaWMdWszbBXg");

                    if (data == null)
                    {
                        continue;
                    }

                    ProcessWRCData((float)frameDT);
                }
                catch (Exception e)
                {
                    Thread.Sleep(1000);
                }
            }

            StopSending();
            Thread.CurrentThread.Join();
        }