• map线程


    来看看map线程到底是如何运行的
    很早就知道一个map是一个线程,以后有可能改成一个map一个进程,那就先来看看一个map一个线程是如何运作的
    其实刚开始整个服务器就是两个线程,但发现这样服务器支持的人数不多,其实我是刚来具体不太清楚到底咋回事,也没有网络进程,最开始就是将GameMap从GameServer中分离出去,单独一个模块
    经理说将GameServer相当于一个总闸的作用,相关的map相关的动作放到GameMap里面去做
    NEW(Map);
    class Map : public MapBase, public thrTransData
    这样就会调用thrTransData的构造函数
    
    thrTransData::thrTransData()
    {
        m_spTimerFactory = NEWSP(TimerFactory);//这就创建这个线程的定时器工厂,然后这个线程里面的所有定时器都是由这个工厂创建出来的,例如宝物定时消失,定时buf,组队,很重要的怪物AI
    };
    然后start();
    void thrTransData::start()
    {
        m_thr.reset(new std::thread(std::bind(&thrTransData::thread, this)));
    }
    
    void thrTransData::thread()//这个线程有两个功能
    {
        //SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
    
        MapPkt pkt;
        int num = 0;
        while (true)
        {
            if(get_data_from_queue(&pkt))//处理GS过来的包
            {
                process_pkt(pkt);
                m_memPool.pushPkt(pkt.data, pkt.len);
    
                num++;
                if(num > 30)
                {
                    num = 0;
                    m_spTimerFactory->driveTimer();
                }
                continue;
            }
            {
                m_spTimerFactory->driveTimer();//驱动本线程的所有定时器
                boost::this_thread::interruptible_wait(1);
            }
        }
    }
    我刚才在想每个玩家怎么自动发到对应地图的,结果发现
    m_map = m_share->getMapByMapID(mapID);
    然后对应m_map->gs2msData(gs2ms_add_player, m_channel_id, (void*)ss.str().c_str(), ss.str().size());然后放到每个线程的m_gs2msPkts2无锁队列的
    所有这样就比较明确了,GS线程将包放到每个线程的队列中,然后线程从队列中取做相应的处理,如果需要到GS这层的将结果放到另一个无多队列中,GS从中取
    无锁队列好像1——53出来的,刚开始不知道有这个好像使用boost::barrier做的,比较复杂,刚过来也就不知道他们到底说的啥
  • 相关阅读:
    JqueryQrcode生成二维码不支持中文的解决办法
    [转载]浅析海量用户的分布式系统设计
    [转载]大型网站应用中 MySQL 的架构演变史
    CSS3变形记(上):千变万化的Div
    JavaScript进阶之路——认识和使用Promise,重构你的Js代码
    Visual Studio Code预览版Ver 0.3.0试用体验
    Apache Spark 2.3.0 正式发布
    Apache Spark 2.2.0 新特性详细介绍
    Apache Spark 2.2.0 正式发布
    Spark 论文篇-论文中英语单词集
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3923129.html
Copyright © 2020-2023  润新知