Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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]);
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        public void UnregisterMessageHandler(string receiverId)
        {
            using (EneterTrace.Entering())
            {
                WorkingThread <object> aWorkingThread = null;

                using (ThreadLock.Lock(myRegisteredMessageHandlers))
                {
                    myRegisteredMessageHandlers.TryGetValue(receiverId, out aWorkingThread);
                    myRegisteredMessageHandlers.Remove(receiverId);
                }

                if (aWorkingThread != null)
                {
                    aWorkingThread.UnregisterMessageHandler();
                }
            }
        }