Exemple #1
0
        public void BasicChecks()
        {
            ThreadLocalVariable <int> threadVar = new ThreadLocalVariable <int>(123);
            Thread parent = Thread.CurrentThread;
            bool   eventOccurred = false;
            bool   valueOk = true, eventOk = true;
            bool   stop    = false;
            bool   started = false;

            ThreadEx t = new ThreadEx(delegate(object o)
            {
                started = true;
                try
                {
                    if ((int)o != 123 || threadVar.Value != 123)
                    {
                        valueOk = false;
                    }
                }
                catch
                {
                    valueOk = false;
                }
                while (!stop)
                {
                    GC.KeepAlive("");                     // Waste time
                }
                started = false;
            });

            EventHandler <ThreadStartEventArgs> eh = null;

            ThreadEx.ThreadStarting += (eh = delegate(object o, ThreadStartEventArgs e)
            {
                eventOccurred = true;
                if (e.ChildThread != t || e.ParentThread != parent)
                {
                    eventOk = false;
                }
                ThreadEx.ThreadStarting -= eh;
            });

            Assert.IsFalse(t.IsAlive);
            Assert.AreEqual(System.Threading.ThreadState.Unstarted, t.ThreadState);
            t.Start(123);
            Assert.IsTrue(t.IsAlive);
            Assert.IsTrue(eventOccurred);
            Assert.IsTrue(eventOk);
            while (!started)
            {
                ThreadEx.Sleep(0);
            }
            Assert.AreEqual(System.Threading.ThreadState.Running, t.ThreadState);
            stop = true;
            Assert.IsTrue(t.Join(5000));
            Assert.IsTrue(valueOk);
            Assert.IsFalse(started);
        }
Exemple #2
0
		public void BasicChecks()
		{
			ThreadLocalVariable<int> threadVar = new ThreadLocalVariable<int>(123);
			Thread parent = Thread.CurrentThread;
			bool eventOccurred = false;
			bool valueOk = true, eventOk = true;
			bool stop = false;
			bool started = false;

			ThreadEx t = new ThreadEx(delegate(object o)
			{
				started = true;
				try
				{
					if ((int)o != 123 || threadVar.Value != 123)
						valueOk = false;
				}
				catch
				{
					valueOk = false;
				}
				while (!stop)
					GC.KeepAlive(""); // Waste time
				started = false;
			});

			EventHandler<ThreadStartEventArgs> eh = null;
			ThreadEx.ThreadStarting += (eh = delegate(object o, ThreadStartEventArgs e)
			{
				eventOccurred = true;
				if (e.ChildThread != t || e.ParentThread != parent)
					eventOk = false;
				ThreadEx.ThreadStarting -= eh;
			});

			Assert.IsFalse(t.IsAlive);
			Assert.AreEqual(System.Threading.ThreadState.Unstarted, t.ThreadState);
			t.Start(123);
			Assert.IsTrue(t.IsAlive);
			Assert.IsTrue(eventOccurred);
			Assert.IsTrue(eventOk);
			while (!started)
				ThreadEx.Sleep(0);
			Assert.AreEqual(System.Threading.ThreadState.Running, t.ThreadState);
			stop = true;
			Assert.IsTrue(t.Join(5000));
			Assert.IsTrue(valueOk);
			Assert.IsFalse(started);
		}
Exemple #3
0
 /// <summary>Helper function for a using statement that temporarily
 /// modifies a thread-local variable.</summary>
 /// <param name="variable">Variable to change</param>
 /// <param name="newValue">New value</param>
 /// <example>
 /// // Temporarily change the method used to convert tokens to strings
 /// using (G.PushTLV(Token.ToStringStrategyTLV, t => /* TODO */))
 /// {
 ///	    Token t = new Token(...);
 ///	    Console.WriteLine(t.ToString());
 /// }
 /// </example>
 public static PushedTLV <T> PushTLV <T>(ThreadLocalVariable <T> variable, T newValue)
 {
     return(new PushedTLV <T>(variable, newValue));
 }