示例#1
0
        //
        // 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();
            });
        }
示例#2
0
        //
        // 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();
                }
            }
        }
示例#3
0
 public UnregisterThread(StRegisteredWait regWait, StNotificationEvent doUnreg)
 {
     this.regWait = regWait;
     this.doUnreg = doUnreg;
 }