2 // System.Threading.ThreadPool
6 // Dick Porter (dick@ximian.com)
7 // Maurer Dietmar (dietmar@ximian.com)
9 // (C) Ximian, Inc. http://www.ximian.com
12 using System.Collections;
13 using System.Runtime.CompilerServices;
15 namespace System.Threading {
17 public sealed class ThreadPool {
24 [MethodImplAttribute(MethodImplOptions.InternalCall)]
25 static extern bool BindHandleInternal (IntPtr osHandle);
27 public static bool BindHandle (IntPtr osHandle)
29 return BindHandleInternal (osHandle);
32 [MethodImplAttribute(MethodImplOptions.InternalCall)]
33 public static extern void GetAvailableThreads (out int workerThreads, out int completionPortThreads);
35 [MethodImplAttribute(MethodImplOptions.InternalCall)]
36 public static extern void GetMaxThreads (out int workerThreads, out int completionPortThreads);
38 public static bool QueueUserWorkItem (WaitCallback callback)
40 IAsyncResult ar = callback.BeginInvoke (null, null, null);
46 public static bool QueueUserWorkItem (WaitCallback callback, object state)
48 IAsyncResult ar = callback.BeginInvoke (state, null, null);
54 public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
55 WaitOrTimerCallback callBack,
57 int millisecondsTimeOutInterval,
60 return RegisterWaitForSingleObject (waitObject, callBack, state,
61 (long) millisecondsTimeOutInterval, executeOnlyOnce);
64 public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
65 WaitOrTimerCallback callBack,
67 long millisecondsTimeOutInterval,
70 if (millisecondsTimeOutInterval < -1)
71 throw new ArgumentOutOfRangeException ("timeout", "timeout < -1");
73 if (millisecondsTimeOutInterval > Int32.MaxValue)
74 throw new NotSupportedException ("Timeout is too big. Maximum is Int32.MaxValue");
76 TimeSpan timeout = new TimeSpan (0, 0, 0, 0, (int) millisecondsTimeOutInterval);
78 RegisteredWaitHandle waiter = new RegisteredWaitHandle (waitObject, callBack, state,
79 timeout, executeOnlyOnce);
80 QueueUserWorkItem (new WaitCallback (waiter.Wait), null);
84 public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
85 WaitOrTimerCallback callBack,
90 return RegisterWaitForSingleObject (waitObject, callBack, state,
91 (long) timeout.TotalMilliseconds, executeOnlyOnce);
96 public static RegisteredWaitHandle RegisterWaitForSingleObject (WaitHandle waitObject,
97 WaitOrTimerCallback callBack,
99 uint millisecondsTimeOutInterval,
100 bool executeOnlyOnce)
102 return RegisterWaitForSingleObject (waitObject, callBack, state,
103 (long) millisecondsTimeOutInterval, executeOnlyOnce);
106 public static bool UnsafeQueueUserWorkItem (WaitCallback callback, object state)
108 IAsyncResult ar = callback.BeginInvoke (state, null, null);