diff options
author | Teravus Ovares | 2008-05-30 12:27:06 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-05-30 12:27:06 +0000 |
commit | 1a47ff8094ee414a47aebd310826906d89428a09 (patch) | |
tree | 0e90b3a33f43ff8617a077bb57b86d6b28e63e71 /ThirdParty/SmartThreadPool/Interfaces.cs | |
parent | * Fixed a dangling event hook that I added. (diff) | |
download | opensim-SC-1a47ff8094ee414a47aebd310826906d89428a09.zip opensim-SC-1a47ff8094ee414a47aebd310826906d89428a09.tar.gz opensim-SC-1a47ff8094ee414a47aebd310826906d89428a09.tar.bz2 opensim-SC-1a47ff8094ee414a47aebd310826906d89428a09.tar.xz |
* This is Melanie's XEngine script engine. I've not tested this real well, however, it's confirmed to compile and OpenSimulator to run successfully without this script engine active.
Diffstat (limited to '')
-rw-r--r-- | ThirdParty/SmartThreadPool/Interfaces.cs | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/ThirdParty/SmartThreadPool/Interfaces.cs b/ThirdParty/SmartThreadPool/Interfaces.cs new file mode 100644 index 0000000..f1c1fcf --- /dev/null +++ b/ThirdParty/SmartThreadPool/Interfaces.cs | |||
@@ -0,0 +1,271 @@ | |||
1 | // Ami Bar | ||
2 | // amibar@gmail.com | ||
3 | |||
4 | using System; | ||
5 | using System.Threading; | ||
6 | |||
7 | namespace Amib.Threading | ||
8 | { | ||
9 | #region Delegates | ||
10 | |||
11 | /// <summary> | ||
12 | /// A delegate that represents the method to run as the work item | ||
13 | /// </summary> | ||
14 | /// <param name="state">A state object for the method to run</param> | ||
15 | public delegate object WorkItemCallback(object state); | ||
16 | |||
17 | /// <summary> | ||
18 | /// A delegate to call after the WorkItemCallback completed | ||
19 | /// </summary> | ||
20 | /// <param name="wir">The work item result object</param> | ||
21 | public delegate void PostExecuteWorkItemCallback(IWorkItemResult wir); | ||
22 | |||
23 | /// <summary> | ||
24 | /// A delegate to call when a WorkItemsGroup becomes idle | ||
25 | /// </summary> | ||
26 | /// <param name="workItemsGroup">A reference to the WorkItemsGroup that became idle</param> | ||
27 | public delegate void WorkItemsGroupIdleHandler(IWorkItemsGroup workItemsGroup); | ||
28 | |||
29 | #endregion | ||
30 | |||
31 | #region WorkItem Priority | ||
32 | |||
33 | public enum WorkItemPriority | ||
34 | { | ||
35 | Lowest, | ||
36 | BelowNormal, | ||
37 | Normal, | ||
38 | AboveNormal, | ||
39 | Highest, | ||
40 | } | ||
41 | |||
42 | #endregion | ||
43 | |||
44 | #region IHasWorkItemPriority interface | ||
45 | |||
46 | public interface IHasWorkItemPriority | ||
47 | { | ||
48 | WorkItemPriority WorkItemPriority { get; } | ||
49 | } | ||
50 | |||
51 | #endregion | ||
52 | |||
53 | #region IWorkItemsGroup interface | ||
54 | |||
55 | /// <summary> | ||
56 | /// IWorkItemsGroup interface | ||
57 | /// </summary> | ||
58 | public interface IWorkItemsGroup | ||
59 | { | ||
60 | /// <summary> | ||
61 | /// Get/Set the name of the WorkItemsGroup | ||
62 | /// </summary> | ||
63 | string Name { get; set; } | ||
64 | |||
65 | IWorkItemResult QueueWorkItem(WorkItemCallback callback); | ||
66 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, WorkItemPriority workItemPriority); | ||
67 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state); | ||
68 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, WorkItemPriority workItemPriority); | ||
69 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback); | ||
70 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, WorkItemPriority workItemPriority); | ||
71 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute); | ||
72 | IWorkItemResult QueueWorkItem(WorkItemCallback callback, object state, PostExecuteWorkItemCallback postExecuteWorkItemCallback, CallToPostExecute callToPostExecute, WorkItemPriority workItemPriority); | ||
73 | |||
74 | IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback); | ||
75 | IWorkItemResult QueueWorkItem(WorkItemInfo workItemInfo, WorkItemCallback callback, object state); | ||
76 | |||
77 | void WaitForIdle(); | ||
78 | bool WaitForIdle(TimeSpan timeout); | ||
79 | bool WaitForIdle(int millisecondsTimeout); | ||
80 | |||
81 | int WaitingCallbacks { get; } | ||
82 | event WorkItemsGroupIdleHandler OnIdle; | ||
83 | |||
84 | void Cancel(); | ||
85 | void Start(); | ||
86 | } | ||
87 | |||
88 | #endregion | ||
89 | |||
90 | #region CallToPostExecute enumerator | ||
91 | |||
92 | [Flags] | ||
93 | public enum CallToPostExecute | ||
94 | { | ||
95 | Never = 0x00, | ||
96 | WhenWorkItemCanceled = 0x01, | ||
97 | WhenWorkItemNotCanceled = 0x02, | ||
98 | Always = WhenWorkItemCanceled | WhenWorkItemNotCanceled, | ||
99 | } | ||
100 | |||
101 | #endregion | ||
102 | |||
103 | #region IWorkItemResult interface | ||
104 | |||
105 | /// <summary> | ||
106 | /// IWorkItemResult interface | ||
107 | /// </summary> | ||
108 | public interface IWorkItemResult | ||
109 | { | ||
110 | /// <summary> | ||
111 | /// Get the result of the work item. | ||
112 | /// If the work item didn't run yet then the caller waits. | ||
113 | /// </summary> | ||
114 | /// <returns>The result of the work item</returns> | ||
115 | object GetResult(); | ||
116 | |||
117 | /// <summary> | ||
118 | /// Get the result of the work item. | ||
119 | /// If the work item didn't run yet then the caller waits until timeout. | ||
120 | /// </summary> | ||
121 | /// <returns>The result of the work item</returns> | ||
122 | /// On timeout throws WorkItemTimeoutException | ||
123 | object GetResult( | ||
124 | int millisecondsTimeout, | ||
125 | bool exitContext); | ||
126 | |||
127 | /// <summary> | ||
128 | /// Get the result of the work item. | ||
129 | /// If the work item didn't run yet then the caller waits until timeout. | ||
130 | /// </summary> | ||
131 | /// <returns>The result of the work item</returns> | ||
132 | /// On timeout throws WorkItemTimeoutException | ||
133 | object GetResult( | ||
134 | TimeSpan timeout, | ||
135 | bool exitContext); | ||
136 | |||
137 | void Abort(); | ||
138 | |||
139 | /// <summary> | ||
140 | /// Get the result of the work item. | ||
141 | /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. | ||
142 | /// </summary> | ||
143 | /// <param name="millisecondsTimeout">Timeout in milliseconds, or -1 for infinite</param> | ||
144 | /// <param name="exitContext"> | ||
145 | /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. | ||
146 | /// </param> | ||
147 | /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the blocking if needed</param> | ||
148 | /// <returns>The result of the work item</returns> | ||
149 | /// On timeout throws WorkItemTimeoutException | ||
150 | /// On cancel throws WorkItemCancelException | ||
151 | object GetResult( | ||
152 | int millisecondsTimeout, | ||
153 | bool exitContext, | ||
154 | WaitHandle cancelWaitHandle); | ||
155 | |||
156 | /// <summary> | ||
157 | /// Get the result of the work item. | ||
158 | /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. | ||
159 | /// </summary> | ||
160 | /// <returns>The result of the work item</returns> | ||
161 | /// On timeout throws WorkItemTimeoutException | ||
162 | /// On cancel throws WorkItemCancelException | ||
163 | object GetResult( | ||
164 | TimeSpan timeout, | ||
165 | bool exitContext, | ||
166 | WaitHandle cancelWaitHandle); | ||
167 | |||
168 | /// <summary> | ||
169 | /// Get the result of the work item. | ||
170 | /// If the work item didn't run yet then the caller waits. | ||
171 | /// </summary> | ||
172 | /// <param name="e">Filled with the exception if one was thrown</param> | ||
173 | /// <returns>The result of the work item</returns> | ||
174 | object GetResult(out Exception e); | ||
175 | |||
176 | /// <summary> | ||
177 | /// Get the result of the work item. | ||
178 | /// If the work item didn't run yet then the caller waits until timeout. | ||
179 | /// </summary> | ||
180 | /// <param name="e">Filled with the exception if one was thrown</param> | ||
181 | /// <returns>The result of the work item</returns> | ||
182 | /// On timeout throws WorkItemTimeoutException | ||
183 | object GetResult( | ||
184 | int millisecondsTimeout, | ||
185 | bool exitContext, | ||
186 | out Exception e); | ||
187 | |||
188 | /// <summary> | ||
189 | /// Get the result of the work item. | ||
190 | /// If the work item didn't run yet then the caller waits until timeout. | ||
191 | /// </summary> | ||
192 | /// <param name="e">Filled with the exception if one was thrown</param> | ||
193 | /// <returns>The result of the work item</returns> | ||
194 | /// On timeout throws WorkItemTimeoutException | ||
195 | object GetResult( | ||
196 | TimeSpan timeout, | ||
197 | bool exitContext, | ||
198 | out Exception e); | ||
199 | |||
200 | /// <summary> | ||
201 | /// Get the result of the work item. | ||
202 | /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. | ||
203 | /// </summary> | ||
204 | /// <param name="millisecondsTimeout">Timeout in milliseconds, or -1 for infinite</param> | ||
205 | /// <param name="exitContext"> | ||
206 | /// true to exit the synchronization domain for the context before the wait (if in a synchronized context), and reacquire it; otherwise, false. | ||
207 | /// </param> | ||
208 | /// <param name="cancelWaitHandle">A cancel wait handle to interrupt the blocking if needed</param> | ||
209 | /// <param name="e">Filled with the exception if one was thrown</param> | ||
210 | /// <returns>The result of the work item</returns> | ||
211 | /// On timeout throws WorkItemTimeoutException | ||
212 | /// On cancel throws WorkItemCancelException | ||
213 | object GetResult( | ||
214 | int millisecondsTimeout, | ||
215 | bool exitContext, | ||
216 | WaitHandle cancelWaitHandle, | ||
217 | out Exception e); | ||
218 | |||
219 | /// <summary> | ||
220 | /// Get the result of the work item. | ||
221 | /// If the work item didn't run yet then the caller waits until timeout or until the cancelWaitHandle is signaled. | ||
222 | /// </summary> | ||
223 | /// <returns>The result of the work item</returns> | ||
224 | /// <param name="e">Filled with the exception if one was thrown</param> | ||
225 | /// On timeout throws WorkItemTimeoutException | ||
226 | /// On cancel throws WorkItemCancelException | ||
227 | object GetResult( | ||
228 | TimeSpan timeout, | ||
229 | bool exitContext, | ||
230 | WaitHandle cancelWaitHandle, | ||
231 | out Exception e); | ||
232 | |||
233 | /// <summary> | ||
234 | /// Gets an indication whether the asynchronous operation has completed. | ||
235 | /// </summary> | ||
236 | bool IsCompleted { get; } | ||
237 | |||
238 | /// <summary> | ||
239 | /// Gets an indication whether the asynchronous operation has been canceled. | ||
240 | /// </summary> | ||
241 | bool IsCanceled { get; } | ||
242 | |||
243 | /// <summary> | ||
244 | /// Gets a user-defined object that qualifies or contains information about an asynchronous operation. | ||
245 | /// </summary> | ||
246 | object State { get; } | ||
247 | |||
248 | /// <summary> | ||
249 | /// Cancel the work item if it didn't start running yet. | ||
250 | /// </summary> | ||
251 | /// <returns>Returns true on success or false if the work item is in progress or already completed</returns> | ||
252 | bool Cancel(); | ||
253 | |||
254 | /// <summary> | ||
255 | /// Get the work item's priority | ||
256 | /// </summary> | ||
257 | WorkItemPriority WorkItemPriority { get; } | ||
258 | |||
259 | /// <summary> | ||
260 | /// Return the result, same as GetResult() | ||
261 | /// </summary> | ||
262 | object Result { get; } | ||
263 | |||
264 | /// <summary> | ||
265 | /// Returns the exception if occured otherwise returns null. | ||
266 | /// </summary> | ||
267 | object Exception { get; } | ||
268 | } | ||
269 | |||
270 | #endregion | ||
271 | } | ||