public void EnqueueDequeueStop_1000000()
        {
            WorkingThread <object> aWorkingThread = new WorkingThread <object>();

            AutoResetEvent  aQueueCompleted     = new AutoResetEvent(false);
            List <string>   aReceivedMessages   = new List <string>();
            Action <object> aProcessingCallback = x =>
            {
                aReceivedMessages.Add((string)x);

                if (aReceivedMessages.Count == 1000000)
                {
                    aQueueCompleted.Set();
                }
            };

            aWorkingThread.RegisterMessageHandler(aProcessingCallback);

            Stopwatch aStopWatch = new Stopwatch();

            aStopWatch.Start();

            for (int i = 0; i < 1000000; ++i)
            {
                aWorkingThread.EnqueueMessage("a");
            }

            aQueueCompleted.WaitOne();

            aStopWatch.Stop();
            Console.WriteLine("Elapsed time: {0}", aStopWatch.Elapsed);

            aWorkingThread.UnregisterMessageHandler();
        }
        public void EnqueueDequeueStop()
        {
            WorkingThread <object> aWorkingThread = new WorkingThread <object>();

            AutoResetEvent  aQueueCompleted     = new AutoResetEvent(false);
            List <string>   aReceivedMessages   = new List <string>();
            Action <object> aProcessingCallback = x =>
            {
                aReceivedMessages.Add((string)x);

                if (aReceivedMessages.Count == 3)
                {
                    aQueueCompleted.Set();
                }
            };

            aWorkingThread.RegisterMessageHandler(aProcessingCallback);

            aWorkingThread.EnqueueMessage("Message1");
            aWorkingThread.EnqueueMessage("Message2");
            aWorkingThread.EnqueueMessage("Message3");

            aQueueCompleted.WaitOne();

            aWorkingThread.UnregisterMessageHandler();

            Assert.AreEqual("Message1", aReceivedMessages[0]);
            Assert.AreEqual("Message2", aReceivedMessages[1]);
            Assert.AreEqual("Message3", aReceivedMessages[2]);
        }
        public void BlockUnblock()
        {
            WorkingThread <object> aWorkingThread1 = new WorkingThread <object>();
            WorkingThread <object> aWorkingThread2 = new WorkingThread <object>();

            Action <object> aProcessingCallback = x => {};

            aWorkingThread1.RegisterMessageHandler(aProcessingCallback);
            aWorkingThread2.RegisterMessageHandler(aProcessingCallback);

            aWorkingThread1.UnregisterMessageHandler();
            aWorkingThread2.UnregisterMessageHandler();
        }
Exemple #4
0
        public void RegisterMessageHandler(string receiverId, Action <object> messageHandler)
        {
            using (EneterTrace.Entering())
            {
                using (ThreadLock.Lock(myRegisteredMessageHandlers))
                {
                    if (myRegisteredMessageHandlers.ContainsKey(receiverId))
                    {
                        string aMessage = "The receiver '" + receiverId + "' is already registered.";
                        EneterTrace.Error(aMessage);
                        throw new InvalidOperationException(aMessage);
                    }

                    // Create and register the working thread for the registering input channel.
                    WorkingThread <object> aWorkingThread = new WorkingThread <object>();
                    aWorkingThread.RegisterMessageHandler(messageHandler);
                    myRegisteredMessageHandlers[receiverId] = aWorkingThread;
                }
            }
        }