private void ThreadWorker() { AutoResetEvent autoResetEvent = new AutoResetEvent(false); while (true) { int serviceId = m_globalMQ.Pop(); if (serviceId == 0) { autoResetEvent.WaitOne(1); } else { ServiceContext service = m_serviceSlots.Get(serviceId); Message msg = service.Pop(); if (msg != null) { service.Callback(msg); m_globalMQ.Push(service.GetId()); } } } }