public byte[] ReadLog(StringBuilder tmp_sb, ref bool has_log) { // 单线程读log buffer tmp_sb.Clear(); has_log = false; byte[] log_array = null; m_AutoEvent.WaitOne(); m_ReadEvent.Reset(); m_WriteEvent.Wait(); Debug.Assert(0 == m_ReadingBuffer.Count()); m_ReadingBuffer = Interlocked.Exchange(ref m_WritingBuffer, m_ReadingBuffer); Debug.Assert(0 == m_WritingBuffer.Count()); m_ReadEvent.Set(); if (m_ReadingBuffer.Count() > 0) { m_ReadingBuffer.Collect(tmp_sb); log_array = Encoding.Default.GetBytes(tmp_sb.ToString()); has_log = true; } return(log_array); }
public LogDBuffer() { m_WritingBuffer = new LogBuf(); m_ReadingBuffer = new LogBuf(); m_WriteEvent = new ManualResetEventSlim(false); m_ReadEvent = new ManualResetEventSlim(true); m_AutoEvent = new AutoResetEvent(false); }