static IOProcessPool() { IOHandlerInfo hi = null; m_mre = new ManualResetEvent(false); m_stack_idle = new Stack <IOHandlerInfo>(); m_queue_work = new Queue <IOHandlerInfo>(); new Thread(() => { while (true) { hi = null; lock (m_queue_work) { if (m_queue_work.Count != 0) { hi = m_queue_work.Dequeue(); } } if (hi == null) { m_mre.WaitOne(); m_mre.Reset(); continue; } hi.Handler(hi.Args); IOProcessPool.PushHandler(hi); } }) { IsBackground = true }.Start(); }
private static IOHandlerInfo PopHandler(IOProcessHandler handler, SocketAsyncEventArgs args) { IOHandlerInfo hi = null; lock (m_stack_idle) { if (m_stack_idle.Count != 0) { hi = m_stack_idle.Pop(); } } if (hi == null) { hi = new IOHandlerInfo(handler, args); } else { hi.Handler = handler; hi.Args = args; } return(hi); }
private static void PushHandler(IOHandlerInfo hi) { lock (m_stack_idle) m_stack_idle.Push(hi); }