예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="tTimer"></param>
        /// <param name="newIndex"></param>
        /// <param name="isAdd"></param>
        /// <returns></returns>
        public static AIChangeEntry Instance(BaseAIEvent aiEventInfo, bool isAdd)
        {
            AIChangeEntry l_AIChangeEntry = null;

            Monitor.Enter(s_LockAIChangeEntryPool);
            {
                if (s_AIChangeEntryPool.Count > 0)
                {
                    l_AIChangeEntry = s_AIChangeEntryPool.Dequeue();
                }
            }
            Monitor.Exit(s_LockAIChangeEntryPool);

            if (l_AIChangeEntry == null)
            {
                l_AIChangeEntry = new AIChangeEntry(aiEventInfo, isAdd);
            }
            else
            {
                l_AIChangeEntry.m_AIEventInfo      = aiEventInfo;
                l_AIChangeEntry.m_IsAddAIEventInfo = isAdd;
            }

            return(l_AIChangeEntry);
        }
예제 #2
0
        /// <summary>
        /// 添加或修改或移去的时间片
        /// </summary>
        /// <param name="tTimer"></param>
        /// <param name="newIndex"></param>
        /// <param name="isAdd"></param>
        private static void Change(BaseAIEvent aiEventInfo, bool isAdd)
        {
            Monitor.Enter(s_LockAIChangeEntryChangeQueue);
            {
                // 在ProcessChangeQueue(...)中释放入不使用的列表中
                s_AIChangeEntryChangeQueue.Enqueue(AIChangeEntry.Instance(aiEventInfo, isAdd));
            }
            Monitor.Exit(s_LockAIChangeEntryChangeQueue);

            // 发生事件
            s_Signal.Set();
        }
예제 #3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="tTimer"></param>
        /// <param name="newIndex"></param>
        /// <param name="isAdd"></param>
        /// <returns></returns>
        public static AIChangeEntry Instance( BaseAIEvent aiEventInfo, bool isAdd )
        {
            AIChangeEntry l_AIChangeEntry = null;

            Monitor.Enter( s_LockAIChangeEntryPool );
            {
                if ( s_AIChangeEntryPool.Count > 0 )
                    l_AIChangeEntry = s_AIChangeEntryPool.Dequeue();
            }
            Monitor.Exit( s_LockAIChangeEntryPool );

            if ( l_AIChangeEntry == null )
                l_AIChangeEntry = new AIChangeEntry( aiEventInfo, isAdd );
            else
            {
                l_AIChangeEntry.m_AIEventInfo = aiEventInfo;
                l_AIChangeEntry.m_IsAddAIEventInfo = isAdd;
            }

            return l_AIChangeEntry;
        }