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;
}