public void ReleaseLock(BufferLock lck)
 {
     lock (buffer)
     {
         locks.Remove(lck);
     }
 }
Esempio n. 2
0
 public string ReadReceived()
 {
     BufferLock.WaitOne();
     if (ReveivedBuffer != null)
     {
         var str = Encoding.Default.GetString(ReveivedBuffer);
         if (str[0] == 0x23 && str[str.Length - 1] == 0x0A)
         {
             ReveivedBuffer = null;  // 清除原有接收数据
             BufferLock.ReleaseMutex();
             return(str.Substring(1, str.Length - 2));
         }
     }
     BufferLock.ReleaseMutex();
     return(null);
 }
Esempio n. 3
0
        private void UpdateBuffer(int offset, int count, BufferLock flags, Action <IntPtr, int> updater)
        {
            RestoreBuffer();

            IntPtr buffer1, buffer2;
            int    buffer1Size, buffer2Size;

            _buffer.Lock(offset, count, out buffer1, out buffer1Size, out buffer2, out buffer2Size, flags);
            try
            {
                if (buffer1 != IntPtr.Zero)
                {
                    updater(buffer1, buffer1Size);
                }
                if (buffer2 != IntPtr.Zero)
                {
                    updater(buffer2, buffer2Size);
                }
            }
            finally
            {
                _buffer.Unlock(buffer1, buffer1Size, buffer2, buffer2Size);
            }
        }
 public BufferLock AcquireLock(int startIndex, int endIndex)
 {
     if (startIndex < 0)
     {
         throw new ArgumentOutOfRangeException("startIndex");
     }
     if (startIndex > endIndex || endIndex >= buffer.Length)
     {
         throw new ArgumentOutOfRangeException("endIndex");
     }
     lock (buffer)
     {
         foreach (var l in locks)
         {
             if (!(endIndex < l.StartIndex || startIndex > l.EndIndex))
             {
                 return(null);
             }
         }
         var bl = new BufferLock(startIndex, endIndex, this);
         locks.Add(bl);
         return(bl);
     }
 }