| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 | 
							- using System;
 
- using System.Collections.Generic;
 
- namespace SharpCifs.Util.Sharpen
 
- {
 
-     public class Thread : IRunnable
 
- 	{
 
- 		private static ThreadGroup _defaultGroup = new ThreadGroup ();
 
- 		private bool _interrupted;
 
- 		private IRunnable _runnable;
 
- 		private ThreadGroup _tgroup;
 
- 		private System.Threading.Thread _thread;
 
- 		
 
- 		[ThreadStatic]
 
- 		private static Thread _wrapperThread;
 
- 		public Thread () : this(null, null, null)
 
- 		{
 
- 		}
 
- 		public Thread (string name) : this (null, null, name)
 
- 		{
 
- 		}
 
- 		public Thread (ThreadGroup grp, string name) : this (null, grp, name)
 
- 		{
 
- 		}
 
- 		public Thread (IRunnable runnable): this (runnable, null, null)
 
- 		{
 
- 		}
 
- 		
 
- 		Thread (IRunnable runnable, ThreadGroup grp, string name)
 
- 		{
 
- 			_thread = new System.Threading.Thread (InternalRun);
 
- 			
 
- 			this._runnable = runnable ?? this;
 
- 			_tgroup = grp ?? _defaultGroup;
 
- 			_tgroup.Add (this);
 
- 			if (name != null)
 
- 				_thread.Name = name;
 
- 		}
 
- 		private Thread (System.Threading.Thread t)
 
- 		{
 
- 			_thread = t;
 
- 			_tgroup = _defaultGroup;
 
- 			_tgroup.Add (this);
 
- 		}
 
- 		public static Thread CurrentThread ()
 
- 		{
 
- 			if (_wrapperThread == null) {
 
- 				_wrapperThread = new Thread (System.Threading.Thread.CurrentThread);
 
- 			}
 
- 			return _wrapperThread;
 
- 		}
 
- 		public string GetName ()
 
- 		{
 
- 			return _thread.Name;
 
- 		}
 
- 		public ThreadGroup GetThreadGroup ()
 
- 		{
 
- 			return _tgroup;
 
- 		}
 
- 		private void InternalRun ()
 
- 		{
 
- 			_wrapperThread = this;
 
- 			try {
 
- 				_runnable.Run ();
 
- 			} catch (Exception exception) {
 
- 				Console.WriteLine (exception);
 
- 			} finally {
 
- 				_tgroup.Remove (this);
 
- 			}
 
- 		}
 
- 		
 
- 		public static void Yield ()
 
- 		{
 
- 		}
 
- 		public void Interrupt ()
 
- 		{
 
- 			lock (_thread) {
 
- 				_interrupted = true;
 
-                 //thread.Interrupt ();
 
-                 //TODO: implement CancellationToken 
 
-                 //_thread.Abort();
 
-                 throw new NotImplementedException("implement CancellationToken for thread");
 
-             }
 
-         }
 
- 		public static bool Interrupted ()
 
- 		{
 
- 			if (Thread._wrapperThread == null) {
 
- 				return false;
 
- 			}
 
- 			Thread wrapperThread = Thread._wrapperThread;
 
- 			lock (wrapperThread) {
 
- 				bool interrupted = Thread._wrapperThread._interrupted;
 
- 				Thread._wrapperThread._interrupted = false;
 
- 				return interrupted;
 
- 			}
 
- 		}
 
- 		public bool IsAlive ()
 
- 		{
 
- 			return _thread.IsAlive;
 
- 		}
 
- 		public void Join ()
 
- 		{
 
- 			_thread.Join ();
 
- 		}
 
- 		public void Join (long timeout)
 
- 		{
 
- 			_thread.Join ((int)timeout);
 
- 		}
 
- 		public virtual void Run ()
 
- 		{
 
- 		}
 
- 		public void SetDaemon (bool daemon)
 
- 		{
 
- 			_thread.IsBackground = daemon;
 
- 		}
 
- 		public void SetName (string name)
 
- 		{
 
- 			_thread.Name = name;
 
- 		}
 
- 		public static void Sleep (long milis)
 
- 		{
 
- 			System.Threading.Thread.Sleep ((int)milis);
 
- 		}
 
- 		public void Start ()
 
- 		{
 
- 			_thread.Start ();
 
- 		}
 
- 		
 
- 		public void Abort ()
 
- 		{
 
-             //TODO: implement CancellationToken 
 
-             //_thread.Abort ();
 
-             throw new NotImplementedException("implement CancellationToken for thread");
 
-         }
 
- 		
 
- 	}
 
- 	public class ThreadGroup
 
- 	{
 
- 		private List<Thread> _threads = new List<Thread> ();
 
- 		
 
- 		public ThreadGroup()
 
- 		{
 
- 		}
 
- 		
 
- 		public ThreadGroup (string name)
 
- 		{
 
- 		}
 
- 		internal void Add (Thread t)
 
- 		{
 
- 			lock (_threads) {
 
- 				_threads.Add (t);
 
- 			}
 
- 		}
 
- 		
 
- 		internal void Remove (Thread t)
 
- 		{
 
- 			lock (_threads) {
 
- 				_threads.Remove (t);
 
- 			}
 
- 		}
 
- 		public int Enumerate (Thread[] array)
 
- 		{
 
- 			lock (_threads) {
 
- 				int count = Math.Min (array.Length, _threads.Count);
 
- 				_threads.CopyTo (0, array, 0, count);
 
- 				return count;
 
- 			}
 
- 		}
 
- 	}
 
- }
 
 
  |