[Mono-devel-list] new ThreadPool implementation

eric lindvall eric at 5stops.com
Tue Jun 24 22:55:01 EDT 2003


maybe i didn't understand something from this code, but how is it a thread
pool? it doesn't seem to be using threads at all. were you trying to make
a single-threaded implementation of ThreadPool?

e.


On Tue, 24 Jun 2003, dietmar wrote:

> Hi all,
> 
> I tried to simplify the ThreadPool implementation using the async
> delegate invoke feature of the runtime. The result is really simple. 
> If there are no objections I will commit that code after impl. the
> remaining 2 function (GetMaxThreads, GetAvailableThreads).
> 
> Any objections?
> 
> - Dietmar

> //
> // System.Threading.ThreadPool
> //
> // Author:
> //   Maurer Dietmar (dietmar at ximian.com)
> //
> // (C) Ximian, Inc.  http://www.ximian.com
> //
> using System;
> using System.Collections;
> 
> namespace System.Threading {
> 
> 	public sealed class ThreadPool {
> 
> 		private ThreadPool ()
> 		{
> 		}
> 
> 		public static bool BindHandle (IntPtr osHandle)
> 		{
> 			throw new NotSupportedException("This is MS specific");
> 		}
> 
> 		public static void GetAvailableThreads (out int workerThreads, out int completionPortThreads)
> 		{
> 			throw new NotImplementedException ();
> 		}
> 
> 		public static void GetMaxThreads (out int workerThreads, out int completionPortThreads)
> 		{
> 			throw new NotImplementedException ();
> 		}
> 			
> 		public static bool QueueUserWorkItem (WaitCallback callback)
> 		{
> 			IAsyncResult ar = callback.BeginInvoke (null, null, null);
> 			return true;
> 		}
> 
> 		public static bool QueueUserWorkItem (WaitCallback callback, object state)
> 		{
> 			IAsyncResult ar = callback.BeginInvoke (state, null, null);
> 			return true;
> 		}
> 
> 		public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
> 										WaitOrTimerCallback callBack,
> 										object state,
> 										int millisecondsTimeOutInterval,
> 										bool executeOnlyOnce)
> 		{
> 			return RegisterWaitForSingleObject (waitObject, callBack, state,
> 							    (long) millisecondsTimeOutInterval, executeOnlyOnce);
> 		}
> 
> 		public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
> 										WaitOrTimerCallback callBack,
> 										object state,
> 										long millisecondsTimeOutInterval,
> 										bool executeOnlyOnce)
> 		{
> 			if (millisecondsTimeOutInterval < -1)
> 				throw new ArgumentOutOfRangeException ("timeout", "timeout < -1");
> 
> 			if (millisecondsTimeOutInterval > Int32.MaxValue)
> 				throw new NotSupportedException ("Timeout is too big. Maximum is Int32.MaxValue");
> 
> 			TimeSpan timeout = new TimeSpan (0, 0, 0, 0, (int) millisecondsTimeOutInterval);
> 			
> 			RegisteredWaitHandle waiter = new RegisteredWaitHandle (waitObject, callBack, state,
> 										timeout, executeOnlyOnce);
> 			QueueUserWorkItem (new WaitCallback (waiter.Wait), null);
> 			return waiter;
> 		}
> 
> 		public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
> 										WaitOrTimerCallback callBack,
> 										object state,
> 										TimeSpan timeout,
> 										bool executeOnlyOnce)
> 		{
> 			return RegisterWaitForSingleObject (waitObject, callBack, state,
> 							    (long) timeout.TotalMilliseconds, executeOnlyOnce);
> 
> 		}
> 
> 		[CLSCompliant(false)]
> 		public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
> 										WaitOrTimerCallback callBack,
> 										object state,
> 										uint millisecondsTimeOutInterval,
> 										bool executeOnlyOnce)
> 		{
> 			return RegisterWaitForSingleObject (waitObject, callBack, state,
> 							    (long) millisecondsTimeOutInterval, executeOnlyOnce);
> 		}
> 
> 		public static bool UnsafeQueueUserWorkItem (WaitCallback callback, object state)
> 		{
> 			throw new NotImplementedException ();
> 		}
> 
> 	}
> }




More information about the Mono-devel-list mailing list