zoukankan      html  css  js  c++  java
  • asynDBCenter(修改)

    asynDBCenter加入数据库心跳,其实是没有找到更好的方法,看看和以前有什么不同
    mongo数据库重练,暂时没有找到好办法,只能这样定时访问
    bool asynDBCenter::init(bool isInitRobot)
    {
        if(isInitRobot)
            m_dbcenter->initRobot();
        bool ret = m_dbcenter->initDBCenter();
        m_lastCheckTime = GetTickCount();//记录了初始值
        if(ret)
            m_spThread.reset(new std::thread(std::bind(&asynDBCenter::threadLoop, this)));
        return ret;
    }
    
    //改成这种方式效率没有以前高了
    /*
    1.以前是通知的方式,然后有命令就立马唤醒线程
    2.这种方式会导致线程不停的切换
    */
    
    void asynDBCenter::threadLoop()
    {
        while(1) 
        {
            CmdPkt pkt;
            if(get_front_and_pop(pkt))//上了把cmd包的锁,保护包,获取请求cmd包
            {
                pkt.process(pkt.on_process, pkt.json.c_str());//根据cmd请求,访问数据库
                continue;
            }
            if(GetTickCount() - m_lastCheckTime > 1000*10)//10访问一次
            {
                HeatBeat();//定时访问数据库
                m_lastCheckTime = GetTickCount();
            }
            else
            {
                boost::this_thread::interruptible_wait(1);
            }
        }
    }
  • 相关阅读:
    POJ1064 浮点数二分答案
    2019牛客暑期多校训练营(第二场)H.Second Large Rectangle
    最大全1子矩阵的两种解法(例题:City Game HDU
    POJ
    Codeforces Round #588 (Div. 2) C
    1216E
    1221D
    BUY LOW, BUY LOWER, POJ
    Priest John's Busiest Day (2-sat)
    poj1080
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3992177.html
Copyright © 2011-2022 走看看