Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }