Example #1
0
        //获得空闲数据缓冲
        public RecvBufferData GetBufferData()
        {
            RecvBufferData FreeData = null;

            System.Threading.Monitor.Enter(s_AsyncLock);
            try
            {
                while (m_queueRecvBufferFree.Count < 1)
                {
                    //无可用资源则等待其他线程释放资源后继续执行
                    System.Threading.Monitor.Exit(s_AsyncLock);
                    System.Threading.Thread.Sleep(10);
                    System.Threading.Monitor.Enter(s_AsyncLock);
                }

                FreeData = m_queueRecvBufferFree.Dequeue();
            }
            finally
            {
                System.Threading.Monitor.Exit(s_AsyncLock);

                FreeData = new RecvBufferData();
            }

            return(FreeData);
        }
Example #2
0
 //将网络数据压入队列
 public void PushData(RecvBufferData Data)
 {
     lock (s_AsyncLock)
     {
         m_RecvDataList[m_iWriteDataIdx].Add(Data);
     }
 }
Example #3
0
 public void PushFreeData(RecvBufferData data)
 {
     lock (s_AsyncLockFree)
     {
         m_queueRecvBufferFree.Enqueue(data);
     }
 }
Example #4
0
 //将网络数据压入队列
 public void PushRecvData(RecvBufferData Data)
 {
     lock (s_AsyncLockRecv)
     {
         m_queueRecvBufferRecv.Enqueue(Data);
     }
 }
Example #5
0
 //读取链表缓冲数据
 public bool PeekData(ref RecvBufferData Data, ref EventData Event)
 {
     if (InnerPeekEvent(ref Event))
     {
         return(true);
     }
     return(InnerPeekData(ref Data));
 }
Example #6
0
        bool InnerPeekData(ref RecvBufferData Data)
        {
            if (m_iCurReadDataIdx >= m_RecvDataList[m_iReadDataIdx].Count)
            {
                Data = null;
                return(false);
            }

            Data = m_RecvDataList[m_iReadDataIdx][m_iCurReadDataIdx++];
            return(true);
        }
Example #7
0
        bool InnerPeekData(ref RecvBufferData Data)
        {
            bool bHasData = false;

            lock (s_AsyncLockRecv)
            {
                if (m_queueRecvBufferRecv.Count > 0)
                {
                    Data     = m_queueRecvBufferRecv.Dequeue();
                    bHasData = true;
                }
            }

            return(bHasData);
        }
Example #8
0
        //获得空闲数据缓冲
        public RecvBufferData GetBufferData()
        {
            RecvBufferData FreeData = null;

            lock (s_AsyncLockFree)
            {
                if (m_queueRecvBufferFree.Count > 0)
                {
                    FreeData = m_queueRecvBufferFree.Dequeue();
                }
            }
            if (FreeData == null)
            {
                FreeData = new RecvBufferData();
            }
            else
            {
                Array.Clear(FreeData.m_abyRecvBuffer, 0, FreeData.m_abyRecvBuffer.Length);
            }

            return(FreeData);
        }