Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
 private static void PushHandler(IOHandlerInfo hi)
 {
     lock (m_stack_idle) m_stack_idle.Push(hi);
 }