Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading;
- namespace ProducerConsumerQueueTest
- {
- class Program
- {
- static ProducerConsumerQueue<string> _messageQueue;
- static volatile bool _stopEnqueuing;
- static void Main(string[] args)
- {
- int producerThreadCount = GetNumber("Enter number of producer threads");
- int consumerThreadCount = GetNumber("Enter number of consumer threads");
- _messageQueue = new ProducerConsumerQueue<string>(consumerThreadCount);
- _messageQueue.Dequeued += _messageQueue_Dequeued;
- _messageQueue.Logged += _messageQueue_Logged;
- var producers = new Thread[producerThreadCount];
- for (int i = 0; i < producerThreadCount; ++i)
- {
- producers[i] = new Thread(EnqueueForever);
- }
- Console.Write("Press Enter to start, then Escape to quit.");
- Console.ReadLine();
- for (int i = 0; i < producerThreadCount; ++i)
- {
- producers[i].Start();
- }
- while (Console.ReadKey().Key != ConsoleKey.Escape) { }
- _stopEnqueuing = true;
- _messageQueue.Dispose();
- Console.WriteLine("Disposed of ProducerConsumerQueue. Press Enter to quit.");
- Console.ReadLine();
- }
- static int GetNumber(string prompt)
- {
- int result;
- Console.Write(prompt + ": ");
- while (!int.TryParse(Console.ReadLine(), out result))
- {
- Console.Write("Unable to parse input. Try again: ");
- }
- return result;
- }
- static void _messageQueue_Dequeued(object sender, EventArgs<string> e)
- {
- Console.WriteLine("Dequeued: {0}", e.Item);
- }
- static void _messageQueue_Logged(object sender, EventArgs<string> e)
- {
- Console.WriteLine("Logged: {0}", e.Item);
- }
- static void EnqueueForever()
- {
- var random = new Random();
- while (!_stopEnqueuing)
- {
- _messageQueue.Enqueue(random.Next().ToString());
- Thread.Sleep(random.Next(0, 500));
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement