| @@ -14,7 +14,7 namespace Implab.Diagnostics.Interactive | |||||
| 14 | TraceForm m_form; |
|
14 | TraceForm m_form; | |
| 15 |
|
15 | |||
| 16 | SynchronizationContext m_syncGuiThread; |
|
16 | SynchronizationContext m_syncGuiThread; | |
| 17 |
readonly Promise |
|
17 | readonly Promise m_guiStarted = new Promise(); | |
| 18 |
|
18 | |||
| 19 | readonly IPromise m_guiFinished; |
|
19 | readonly IPromise m_guiFinished; | |
| 20 | // readonly IPromise m_workerFinished = new Promise<object>(); |
|
20 | // readonly IPromise m_workerFinished = new Promise<object>(); | |
| @@ -30,8 +30,8 namespace Implab.Diagnostics.Interactive | |||||
| 30 | readonly ManualResetEvent m_pauseEvent = new ManualResetEvent(true); |
|
30 | readonly ManualResetEvent m_pauseEvent = new ManualResetEvent(true); | |
| 31 |
|
31 | |||
| 32 | public InteractiveListener(bool global) : base(global) { |
|
32 | public InteractiveListener(bool global) : base(global) { | |
| 33 |
m_guiFinished = AsyncPool. |
|
33 | m_guiFinished = AsyncPool.RunThread(GuiThread); | |
| 34 |
/*m_workerFinished = */AsyncPool. |
|
34 | /*m_workerFinished = */AsyncPool.RunThread(QueueThread); | |
| 35 |
|
35 | |||
| 36 | m_guiStarted.Join(); |
|
36 | m_guiStarted.Join(); | |
| 37 | } |
|
37 | } | |
| @@ -39,12 +39,14 namespace Implab { | |||||
| 39 | } |
|
39 | } | |
| 40 | } |
|
40 | } | |
| 41 |
|
41 | |||
| 42 |
protected |
|
42 | protected bool BeginSetResult() { | |
| 43 | if (!BeginTransit()) { |
|
43 | if (!BeginTransit()) { | |
| 44 | WaitTransition(); |
|
44 | WaitTransition(); | |
| 45 | if (m_state != CANCELLED_STATE) |
|
45 | if (m_state != CANCELLED_STATE) | |
| 46 | throw new InvalidOperationException("The promise is already resolved"); |
|
46 | throw new InvalidOperationException("The promise is already resolved"); | |
|
|
47 | return false; | |||
| 47 | } |
|
48 | } | |
|
|
49 | return true; | |||
| 48 | } |
|
50 | } | |
| 49 |
|
51 | |||
| 50 | protected void EndSetResult() { |
|
52 | protected void EndSetResult() { | |
| @@ -187,6 +187,8 namespace Implab.Parallels { | |||||
| 187 | public void EnqueueRange(T[] data, int offset, int length) { |
|
187 | public void EnqueueRange(T[] data, int offset, int length) { | |
| 188 | if (data == null) |
|
188 | if (data == null) | |
| 189 | throw new ArgumentNullException("data"); |
|
189 | throw new ArgumentNullException("data"); | |
|
|
190 | if (length == 0) | |||
|
|
191 | return; | |||
| 190 | if (offset < 0) |
|
192 | if (offset < 0) | |
| 191 | throw new ArgumentOutOfRangeException("offset"); |
|
193 | throw new ArgumentOutOfRangeException("offset"); | |
| 192 | if (length < 1 || offset + length > data.Length) |
|
194 | if (length < 1 || offset + length > data.Length) | |
| @@ -17,6 +17,7 namespace Implab.Parallels { | |||||
| 17 | return false; |
|
17 | return false; | |
| 18 | m_exclusive = true; |
|
18 | m_exclusive = true; | |
| 19 | m_locks = 1; |
|
19 | m_locks = 1; | |
|
|
20 | return true; | |||
| 20 | } |
|
21 | } | |
| 21 | } |
|
22 | } | |
| 22 |
|
23 | |||
| @@ -31,7 +32,7 namespace Implab.Parallels { | |||||
| 31 | return true; |
|
32 | return true; | |
| 32 | } |
|
33 | } | |
| 33 |
|
34 | |||
| 34 | if (m_lock == 0) { |
|
35 | if (m_locks == 0) { | |
| 35 | m_exclusive = false; |
|
36 | m_exclusive = false; | |
| 36 | m_locks = 1; |
|
37 | m_locks = 1; | |
| 37 | return true; |
|
38 | return true; | |
| @@ -302,9 +302,10 namespace Implab { | |||||
| 302 | T m_result; |
|
302 | T m_result; | |
| 303 |
|
303 | |||
| 304 | public virtual void Resolve(T value) { |
|
304 | public virtual void Resolve(T value) { | |
| 305 |
BeginSetResult() |
|
305 | if (BeginSetResult()) { | |
| 306 | m_result = value; |
|
306 | m_result = value; | |
| 307 | EndSetResult(); |
|
307 | EndSetResult(); | |
|
|
308 | } | |||
| 308 | } |
|
309 | } | |
| 309 |
|
310 | |||
| 310 | public void Reject(Exception error) { |
|
311 | public void Reject(Exception error) { | |
General Comments 0
You need to be logged in to leave comments.
Login now
