// // Starts the test. // internal static Action Run() { Thread.CurrentThread.Priority = ThreadPriority.Highest; StSemaphore s = new StSemaphore(0); StNotificationEvent doUnreg = new StNotificationEvent(); StRegisteredWait regWait = s.RegisterWait(RegisteredWaitCallback, null, 250, false); new UnregisterThread(regWait, doUnreg).Start(); s.Release(20); return(() => { doUnreg.Set(); for (int i = 0; i < 100; i++) { s.Release(1); } Console.ReadLine(); }); }
// // Registered wait callback // private static void RegisteredWaitCallback(object state, bool timedOut) { StRegisteredWait regWait = (StRegisteredWait)state; int now = Environment.TickCount; int elapsed = now - lastTime; lastTime = now; if (timedOut) { Console.WriteLine("+++Wait callback called due to timeout[{0}]", elapsed); } else { Console.WriteLine("+++Wait callback called due to success[{0}]", ++count); if (count == 25) { regWait.Unregister(); } } }
public UnregisterThread(StRegisteredWait regWait, StNotificationEvent doUnreg) { this.regWait = regWait; this.doUnreg = doUnreg; }