예제 #1
0
        public void AsyncSendUserPostAction(Action <object> action, object obj)
        {
            if (Thread.CurrentThread.ManagedThreadId == _loopHandle.LoopRunThreadId)
            {
                action(obj);
                return;
            }

            lock (lockObject)
            {
                UserPostActionQueue.Enqueue(new QueueUserAction
                {
                    CallbackAction = action,
                    State          = obj
                });
                _postFlag++;
                _postFlag %= 2;
            }
            if (_postFlag == 0)
            {
                _asyncHand1.AsyncSend();
                return;
            }
            _asyncHand2.AsyncSend();
        }
예제 #2
0
파일: Listener.cs 프로젝트: zr8091/OwinDog
 /// <summary>
 /// 当发送异步信号后 会调用async的callback 会执行队列里面的方法
 /// </summary>
 /// <param name="action">callback方法</param>
 /// <param name="obj">callback的参数</param>
 public void AsyncSendUserPostAction(Action <object> action, object obj)
 {
     if (Thread.CurrentThread.ManagedThreadId == _loopHandle.LoopRunThreadId)//Listener
     {
         action(obj);
         return;
     }
     lock (lockObject)//因为是多线程可以同时发送唤醒消息
     {
         //使用队列的方式 先存进队列 然后在 UserPostActionExcute 里面 POP出来执行
         UserPostActionQueue.Enqueue(new QueueUserAction
         {
             CallbackAction = action,
             State          = obj
         });
         _postFlag++;
         _postFlag %= 2;
     }
     //_asyncHand1 和 _asyncHand2 交替 提高性能
     if (_postFlag == 0)
     {
         _asyncHand1.AsyncSend();
         return;
     }
     _asyncHand2.AsyncSend();
 }