• 服务器线程(不断跟新)


    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线程来驱动。
  • 相关阅读:
    前端js(一)
    前端CSS
    前端HTML
    视图等
    Navicat使用
    查询语句
    SpringBoot不能直接访问templates下的静态资源
    Mybatis什么时候用${}
    thymeleaf使用restul风格URL
    SpringBoot使用PageHelper
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3708324.html
Copyright © 2020-2023  润新知