码迷,mamicode.com
首页 > 编程语言 > 详细

服务器线程(不断跟新)

时间:2014-05-09 19:01:47      阅读:426      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   tar   

bubuko.com,布布扣

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

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

bubuko.com,布布扣
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();
}
bubuko.com,布布扣

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

bubuko.com,布布扣
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);
        }
    }
}
bubuko.com,布布扣

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

//共享Map中的定时器,让Map线程来驱动。

 

服务器线程(不断跟新),布布扣,bubuko.com

服务器线程(不断跟新)

标签:style   blog   class   code   java   tar   

原文地址:http://www.cnblogs.com/zzyoucan/p/3708324.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!