Exemplo n.º 1
0
        //-------------------------------------------------------------------------
        // 根据时间,执行时间事件
        public void processTimer(ulong jeffies)
        {
            EbDoubleLinkList <EbTimeEvent> excute_time = new EbDoubleLinkList <EbTimeEvent>();
            {
                while (jeffies >= mTimeJeffies)
                {
                    ulong index = mTimeJeffies & MAX_WHEEL_MASK;

                    if (index == 0 && _cascadeTimer(mWheel2, 0) == 0 && _cascadeTimer(mWheel3, 1) == 0 && _cascadeTimer(mWheel4, 2) == 0)
                    {
                        _cascadeTimer(mWheel5, 3);
                    }
                    mTimeJeffies++;

                    excute_time.addTailList(mWheel1.getSpoke((int)index));
                }
            }
            EbDoubleLinkNode <EbTimeEvent> head, curr, next;

            head = excute_time.head();
            curr = head.next;

            while (curr != head)
            {
                next = curr.next;
                _delTimer(curr);

                // 调用委托
                if (curr.mObject.onTime != null)
                {
                    curr.mObject.onTime(curr.mObject.mData);
                }

                curr = next;
            }
        }