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);
            }
        }
    }
  • 相关阅读:
    博客园侧边栏添加QQ链接
    通俗易懂的理解 Redux(知乎)
    Redux生态系统
    ReactNative环境搭建
    cordova插件开发
    java类初始化
    Cordova指令
    安卓中如何调用jni
    JNI开发的常见错误
    JNI-java native interface(java本地接口)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3992177.html
Copyright © 2011-2022 走看看