Exemplo n.º 1
0
		public static bool WaitAny(Event[] events, int millisecs)
		{
			if (events.Length == 1)
			{
				return events[0].Wait(millisecs);
			}
			return ((WaitHandle.WaitTimeout == EventWaitHandle.WaitAny(toArray(events), millisecs, false)) ? false : true);
		}
Exemplo n.º 2
0
		public static bool WaitAny(Event[] events)
		{
			return WaitAny(events, Infinite);
		}
Exemplo n.º 3
0
		static bool waitAllInner(Event[] events, int millisecs)
		{
			if (events.Length == 1)
			{
				return events[0].Wait(millisecs);
			}
			return EventWaitHandle.WaitAll(toArray(events), millisecs, false);
		}
Exemplo n.º 4
0
		static bool waitAllMulti(Event[] events, int millisecs)
		{
			int numBlocks = (events.Length + 63) / 64;
			List<Event>[] list = new List<Event>[numBlocks];
			int i;
			for (i = 0; i < numBlocks; i++)
			{
				list[i] = new List<Event>();
			}
			for (i = 0; i < events.Length; i++)
			{
				list[i / 64].Add(events[i]);
			}

			double start = Time.NowDouble;
			double giveup = start + (double)millisecs / 1000.0;
			foreach (List<Event> o in list)
			{
				double now = Time.NowDouble;
				if (now <= giveup || millisecs < 0)
				{
					int waitmsecs;
					if (millisecs >= 0)
					{
						waitmsecs = (int)((giveup - now) * 1000.0);
					}
					else
					{
						waitmsecs = Timeout.Infinite;
					}

					bool ret = waitAllInner(o.ToArray(), waitmsecs);
					if (ret == false)
					{
						return false;
					}
				}
				else
				{
					return false;
				}
			}

			return true;
		}
Exemplo n.º 5
0
		public static bool WaitAll(Event[] events, int millisecs)
		{
			if (events.Length <= 64)
			{
				return waitAllInner(events, millisecs);
			}
			else
			{
				return waitAllMulti(events, millisecs);
			}
		}
Exemplo n.º 6
0
		static EventWaitHandle[] toArray(Event[] events)
		{
			List<EventWaitHandle> list = new List<EventWaitHandle>();

			foreach (Event e in events)
			{
				list.Add(e.h);
			}

			return list.ToArray();
		}