コード例 #1
0
        public void Shutdown()
        {
            if (logger.IsDebugEnabled)
            {
                logger.Debug($"{GetType().Name} Shutdown() - thread request shutdown");
            }

            context.RequestShutdown();

            lock (this)
            {
                if (sessionWatchdogThread == null)
                {
                    return;
                }

                sessionWatchdogThread.Join(ShutdownTimeout);
                sessionWatchdogThread = null;
            }

            if (logger.IsDebugEnabled)
            {
                logger.Debug($"{GetType().Name} Shutdown() - thread stopped");
            }
        }
コード例 #2
0
        public void CreateInstantiatesANewThreadSurrogate()
        {
            // given
            var target = ThreadSurrogate.Create("test");

            // then
            Assert.That(target, Is.Not.Null.And.InstanceOf <ThreadSurrogate>());
        }
コード例 #3
0
        public void AStartedThreadThrowsExceptionIfStartIsCalledAgain()
        {
            // given
            const string threadName = "test";
            var          target     = ThreadSurrogate.Create(threadName).Start(ThreadStart);

            // when
            Assert.Throws <InvalidOperationException>(() => target.Start(ThreadStart), $"Thread {threadName} already started.");
        }
コード例 #4
0
        public void Initialize()
        {
            if (logger.IsDebugEnabled)
            {
                logger.Debug($"{GetType().Name} thread started");
            }

            // create sending thread
            beaconSenderThread = ThreadSurrogate.Create(GetType().Name).Start(SenderThread);
        }
コード例 #5
0
        public void JoinWaitsForTheThreadToFinish()
        {
            // given
            var target = ThreadSurrogate.Create("test").Start(ThreadStart);

            // when
            target.Join(100);

            // then
            Assert.That(ModifiableValue, Is.EqualTo(UpdatedValue));
        }
コード例 #6
0
        public void JoinOnANotStartedThreadDoesNothing()
        {
            // given
            var target = ThreadSurrogate.Create("test");

            // when
            target.Join(10);

            // then
            Assert.That(ModifiableValue, Is.EqualTo(-1));
        }
コード例 #7
0
        public void CreateSetsThreadName()
        {
            // given
            const string threadName = "test-thread";

            // when
            var target = ThreadSurrogate.Create(threadName);

            // then
            Assert.That(target.ThreadName, Is.EqualTo(threadName));
        }
コード例 #8
0
        public void StartExecutesGivenThreadStart()
        {
            // given
            var target = ThreadSurrogate.Create("test");

            // when
            target.Start(ThreadStart);
            threadFinishedEvent.WaitOne(100);

            // then
            Assert.That(ModifiableValue, Is.EqualTo(UpdatedValue));
        }
コード例 #9
0
        public void Initialize()
        {
            if (logger.IsDebugEnabled)
            {
                logger.Debug($"{GetType().Name} Initialize() - thread started");
            }

            lock (this)
            {
                sessionWatchdogThread = ThreadSurrogate.Create(GetType().Name).Start(WatchdogThreadStart);
            }
        }
コード例 #10
0
        public void SleepReturnsFalseIfInterrupted()
        {
            // given
            const int sleepTime = 1000;
            var       target    = CreateInstance();
            var       task      = new ExecutableTask(target, sleepTime);

            // when
            var thread = ThreadSurrogate.Create("test").Start(task.Process);

            thread.Join(500);

            // then
            Assert.That(task.SleepOutCome, Is.EqualTo(0));
        }
コード例 #11
0
        public void WakeUpInterruptsSleep()
        {
            // given
            const int sleepTime = 5000;
            var       target    = CreateInstance();
            var       task      = new ExecutableTask(target, sleepTime);

            // when
            var thread = ThreadSurrogate.Create("test-thread").Start(task.Process);

            target.WakeUp();

            thread.Join(sleepTime);

            // then
            Assert.That(task.SleptTime, Is.LessThan(sleepTime));
        }