Beispiel #1
0
        /// <summary>
        /// Reads and processes log messages
        /// </summary>
        private void Run()
        {
            AvailableLogMessage message = null;

            while (true)
            {
                // wait until queue is not empty
                hRead.WaitOne();
                lock (logMessageQueue)
                {
                    message = logMessageQueue.Dequeue();

                    // disable reader when queue is empty
                    if (logMessageQueue.Count == 0)
                    {
                        hRead.Reset();
                    }

                    // inform writer that queue is able to write
                    if (logMessageQueue.Count < MaxCapability)
                    {
                        hWrite.Set();
                    }
                }

                // skip empty message
                if (null == message)
                {
                    continue;
                }

                // end thread if this is the final message
                if (message.EndOfLog)
                {
                    message.Dispose();
                    message = null;
                    return;
                }

                // process message
                WriteInfoToSinks(message.LogInfo, (List <LogSink>)message.LogSinks);
                message.Dispose();
                message = null;
            }
        }