Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Okay I'm trying out a possible solution to this problem using EventWaitHandle. Looking for comments / feedback. Can this work reliably?</p> <pre><code>// Implementation of a manual event class with a DelayedSet method // DelayedSet will set the event after a delay period // TODO: Improve exception handling public sealed class DelayedManualEvent : EventWaitHandle { private SysTimer timer; // using SysTimer = System.Timers.Timer; public DelayedManualEvent() : base(true, EventResetMode.ManualReset) { timer = new SysTimer(); timer.AutoReset = false; timer.Elapsed +=new ElapsedEventHandler(OnTimeout); } public bool DelayedSet(TimeSpan delay) { bool result = false; try { double timeout = delay.TotalMilliseconds; if (timeout &gt; 0 &amp;&amp; timer != null &amp;&amp; Reset()) { timer.Interval = timeout; timer.Start(); result = true; Trace.TraceInformation("DelayedManualEvent.DelayedSet Event will be signaled in {0}ms", delay); } } catch (Exception e) { Trace.TraceError("DelayedManualEvent.DelayedSet Exception {0}\n{1}", e.Message, e.StackTrace); } return result; } private void OnTimeout(object source, ElapsedEventArgs e) { if (timer != null) { timer.Stop(); Trace.TraceInformation("DelayedManualEvent.OnTimeout Event signaled at time {0}", e.SignalTime); } try { if (!Set()) { Trace.TraceError("DelayedManualEvent.OnTimeout Event set failed"); } } catch (Exception ex) { Trace.TraceError("DelayedManualEvent.OnTimeout Exception in signaling event\n{0}]\n{1}", ex.Message, ex.StackTrace); } } protected override void Dispose(bool disposing) { if (timer != null) { timer.Dispose(); } base.Dispose(disposing); } } </code></pre> <p>The way I'm planning to use this:</p> <pre><code>// Pseudocode static DelayedManualEvent delayedEvent = new DelayedManualEvent(); static TimeSpan t1, t2, maxTimeout; public static void DoThis() { if(!delayedEvent.WaitOne(maxTimeout)) return; DoStuff(); delayedEvent.DelayedSet(t1); } public static void DoThat() { if(!delayedEvent.WaitOne(maxTimeout)) return; DoOtherStuff(); delayedEvent.DelayedSet(t2); } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload