//获得空闲数据缓冲 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); }
//将网络数据压入队列 public void PushData(RecvBufferData Data) { lock (s_AsyncLock) { m_RecvDataList[m_iWriteDataIdx].Add(Data); } }
public void PushFreeData(RecvBufferData data) { lock (s_AsyncLockFree) { m_queueRecvBufferFree.Enqueue(data); } }
//将网络数据压入队列 public void PushRecvData(RecvBufferData Data) { lock (s_AsyncLockRecv) { m_queueRecvBufferRecv.Enqueue(Data); } }
//读取链表缓冲数据 public bool PeekData(ref RecvBufferData Data, ref EventData Event) { if (InnerPeekEvent(ref Event)) { return(true); } return(InnerPeekData(ref Data)); }
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); }
bool InnerPeekData(ref RecvBufferData Data) { bool bHasData = false; lock (s_AsyncLockRecv) { if (m_queueRecvBufferRecv.Count > 0) { Data = m_queueRecvBufferRecv.Dequeue(); bHasData = true; } } return(bHasData); }
//获得空闲数据缓冲 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); }