aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs')
-rw-r--r--ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs164
1 files changed, 82 insertions, 82 deletions
diff --git a/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs b/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs
index 2f8c55b..3c9c849 100644
--- a/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs
+++ b/ThirdParty/SmartThreadPool/EventWaitHandleFactory.cs
@@ -1,82 +1,82 @@
1using System.Threading; 1using System.Threading;
2 2
3#if (_WINDOWS_CE) 3#if (_WINDOWS_CE)
4using System; 4using System;
5using System.Runtime.InteropServices; 5using System.Runtime.InteropServices;
6#endif 6#endif
7 7
8namespace Amib.Threading.Internal 8namespace Amib.Threading.Internal
9{ 9{
10 /// <summary> 10 /// <summary>
11 /// EventWaitHandleFactory class. 11 /// EventWaitHandleFactory class.
12 /// This is a static class that creates AutoResetEvent and ManualResetEvent objects. 12 /// This is a static class that creates AutoResetEvent and ManualResetEvent objects.
13 /// In WindowCE the WaitForMultipleObjects API fails to use the Handle property 13 /// In WindowCE the WaitForMultipleObjects API fails to use the Handle property
14 /// of XxxResetEvent. It can use only handles that were created by the CreateEvent API. 14 /// of XxxResetEvent. It can use only handles that were created by the CreateEvent API.
15 /// Consequently this class creates the needed XxxResetEvent and replaces the handle if 15 /// Consequently this class creates the needed XxxResetEvent and replaces the handle if
16 /// it's a WindowsCE OS. 16 /// it's a WindowsCE OS.
17 /// </summary> 17 /// </summary>
18 public static class EventWaitHandleFactory 18 public static class EventWaitHandleFactory
19 { 19 {
20 /// <summary> 20 /// <summary>
21 /// Create a new AutoResetEvent object 21 /// Create a new AutoResetEvent object
22 /// </summary> 22 /// </summary>
23 /// <returns>Return a new AutoResetEvent object</returns> 23 /// <returns>Return a new AutoResetEvent object</returns>
24 public static AutoResetEvent CreateAutoResetEvent() 24 public static AutoResetEvent CreateAutoResetEvent()
25 { 25 {
26 AutoResetEvent waitHandle = new AutoResetEvent(false); 26 AutoResetEvent waitHandle = new AutoResetEvent(false);
27 27
28#if (_WINDOWS_CE) 28#if (_WINDOWS_CE)
29 ReplaceEventHandle(waitHandle, false, false); 29 ReplaceEventHandle(waitHandle, false, false);
30#endif 30#endif
31 31
32 return waitHandle; 32 return waitHandle;
33 } 33 }
34 34
35 /// <summary> 35 /// <summary>
36 /// Create a new ManualResetEvent object 36 /// Create a new ManualResetEvent object
37 /// </summary> 37 /// </summary>
38 /// <returns>Return a new ManualResetEvent object</returns> 38 /// <returns>Return a new ManualResetEvent object</returns>
39 public static ManualResetEvent CreateManualResetEvent(bool initialState) 39 public static ManualResetEvent CreateManualResetEvent(bool initialState)
40 { 40 {
41 ManualResetEvent waitHandle = new ManualResetEvent(initialState); 41 ManualResetEvent waitHandle = new ManualResetEvent(initialState);
42 42
43#if (_WINDOWS_CE) 43#if (_WINDOWS_CE)
44 ReplaceEventHandle(waitHandle, true, initialState); 44 ReplaceEventHandle(waitHandle, true, initialState);
45#endif 45#endif
46 46
47 return waitHandle; 47 return waitHandle;
48 } 48 }
49 49
50#if (_WINDOWS_CE) 50#if (_WINDOWS_CE)
51 51
52 /// <summary> 52 /// <summary>
53 /// Replace the event handle 53 /// Replace the event handle
54 /// </summary> 54 /// </summary>
55 /// <param name="waitHandle">The WaitHandle object which its handle needs to be replaced.</param> 55 /// <param name="waitHandle">The WaitHandle object which its handle needs to be replaced.</param>
56 /// <param name="manualReset">Indicates if the event is a ManualResetEvent (true) or an AutoResetEvent (false)</param> 56 /// <param name="manualReset">Indicates if the event is a ManualResetEvent (true) or an AutoResetEvent (false)</param>
57 /// <param name="initialState">The initial state of the event</param> 57 /// <param name="initialState">The initial state of the event</param>
58 private static void ReplaceEventHandle(WaitHandle waitHandle, bool manualReset, bool initialState) 58 private static void ReplaceEventHandle(WaitHandle waitHandle, bool manualReset, bool initialState)
59 { 59 {
60 // Store the old handle 60 // Store the old handle
61 IntPtr oldHandle = waitHandle.Handle; 61 IntPtr oldHandle = waitHandle.Handle;
62 62
63 // Create a new event 63 // Create a new event
64 IntPtr newHandle = CreateEvent(IntPtr.Zero, manualReset, initialState, null); 64 IntPtr newHandle = CreateEvent(IntPtr.Zero, manualReset, initialState, null);
65 65
66 // Replace the old event with the new event 66 // Replace the old event with the new event
67 waitHandle.Handle = newHandle; 67 waitHandle.Handle = newHandle;
68 68
69 // Close the old event 69 // Close the old event
70 CloseHandle (oldHandle); 70 CloseHandle (oldHandle);
71 } 71 }
72 72
73 [DllImport("coredll.dll", SetLastError = true)] 73 [DllImport("coredll.dll", SetLastError = true)]
74 public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName); 74 public static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
75 75
76 //Handle 76 //Handle
77 [DllImport("coredll.dll", SetLastError = true)] 77 [DllImport("coredll.dll", SetLastError = true)]
78 public static extern bool CloseHandle(IntPtr hObject); 78 public static extern bool CloseHandle(IntPtr hObject);
79#endif 79#endif
80 80
81 } 81 }
82} 82}