zoukankan      html  css  js  c++  java
  • 服务器线程(不断跟新)

    m_spNPC = NEWSP(NPC);//NPC加载,如怪物等
    m_spNPC->setFT(m_spTimerFactory.get());//共享Map中的定时器,让Map线程来驱动。
    m_spNPC->setMapPtr_NPC(this);//一定要先调用地图

    看到这个代码让我蛋疼一把,搜了一下m_spTimerFactory也没有看到相应的注册函数,于是看了下setFT:

    void NPC::setFT(I_TimerFactory* pFT)
    {
        m_pFT = pFT;    
        //[L]模拟怪物移动
        m_NpcAITimer.reset(/*GetPlug(TimerFactory)*/m_pFT->createTimer());//Timer::createTimer();
        m_NpcAITimer->setInterval(1000);//
        m_NpcAITimer->regTimer(std::bind(&NPC::NpcAITimer, this));
        m_NpcAITimer->start();
    }

    原来是NPC中定义了一个std::shared_ptr<I_Timer> m_NpcAITimer;然后m_spTimerFactory通过调用createTimer()就创建了一个定时器给他然后注册定时器函数,那这个定时器在哪儿驱动的呢?

    void thrTransData::thread()
    {
        MapPkt pkt;
        int num = 0;
        while (true)
        {
            if(get_data_from_queue(&pkt))
            {
                process_pkt(pkt);
                num++;
                if(num > 30)
                {
                    num = 0;
                    m_spTimerFactory->driveTimer();
                }
                continue;
            }
            {
                m_spTimerFactory->driveTimer();
                boost::this_thread::interruptible_wait(1);
            }
        }
    }

    不知这个线程时Map线程还是thrTranData线程,反正是在这里驱动的,所以才有上面的

    //共享Map中的定时器,让Map线程来驱动。
  • 相关阅读:
    HTML5基础内容(二)
    JavaScript逻辑运算符
    JavaScript自增运算符和自减运算符
    JavaScript算数运算符和一元运算符
    CSS分页
    HTML和CSS遇到的细节问题
    JavaScript数据类型转换
    JavaScript标识符
    HTML5基础知识汇总(一)
    CSS颜色透明度
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3708324.html
Copyright © 2011-2022 走看看