ObjKsTheme::ObjKsTheme( const QString& theme ) :mActiveTheme (theme), mThemeDir("/"), mThemeConfig (0L), mThemePrefix( "Themes/" ), d(0) { // Get Xinerama config. KConfig *config = kapp->config(); config->setGroup( "Xinerama" ); QDesktopWidget *desktop = kapp->desktop(); mXineramaScreen = config->readNumEntry("KSplashScreen", desktop->primaryScreen()); // For Xinerama, let's put the mouse on the first head. Otherwise it could appear anywhere! if (desktop->isVirtualDesktop() && mXineramaScreen != -2) { QRect rect = desktop->screenGeometry( mXineramaScreen ); if (!rect.contains(QCursor::pos())) QCursor::setPos(rect.center()); } // Does the active theme exist? if( !loadThemeRc( mActiveTheme, false ) ) if( !loadLocalConfig( mActiveTheme, false ) ) if( !loadThemeRc( "Default", false ) ) loadLocalConfig( "Default", true ); //force: we need some defaults loadCmdLineArgs(KCmdLineArgs::parsedArgs()); mThemePrefix += ( mActiveTheme + "/" ); }
int KSGateway::run() { int ret = loadLocalConfig(); if(ret) return ret; ret = setupLogSystem(); if(ret) return ret; ACE_DEBUG((LM_INFO,"开始启动前置机...")); ACE_DEBUG((LM_INFO,"应用服务器[%s:%d]func[%d]",_configuration._drtpSvrIP.c_str() ,_configuration._drtpSvrPort,_configuration._drtpMainFunc)); ret = setupDrtpPool(); if(ret) { ACE_DEBUG((LM_ERROR,"初始化DRTP连接失败,返回码[%d]",ret)); return ret; } ret = enroll(); if(ret) { ACE_DEBUG((LM_ERROR,"前置机签到失败,错误码[%d]",ret)); return ret; } ret = downloadRuntimeParams(); if(ret) { ACE_DEBUG((LM_ERROR,"下载运行参数失败,错误码[%d]",ret)); return ret; } // 加载 loop 设备 ret = loadLoopDevice(); if(ret) { return ret; } if("" != _configuration._devType) { // 只有当有设备时,才需要调用设置初始化 ret = loadDeviceType(); if(ret) { return ret; } ret = setupAllDevices(); if(ret) { return ret; } } else { ACE_DEBUG((LM_INFO,"前置机未加载设备!")); } loadTaskExecutor(); ret = setup_all_proactor_acceptor(); ret = startTimeScheduler(); if(ret) return ret; ACE_DEBUG((LM_INFO,"启动前置机成功...")); // 进入主循环 _status = stRunning; int i = 0; while(_status == stRunning) { KSGThreadUtil::Sleep(5000); KSGThreadUtil::yield(); } ACE_DEBUG((LM_INFO,"正在停止前置机...")); stop_all_proactor_acceptor(); SchedulerGroup::Instance().TerminateAll(); _devgrpSchd.TerminateAll(); ACE_DEBUG((LM_INFO,"主流程运行结束")); exit(); return 0; }
int KSGateway::run() { long sleep_time = 0; int ret = loadLocalConfig(); if(ret) return ret; ret = setupLogSystem(); if(ret) return ret; ACE_DEBUG((LM_INFO,"开始启动前置机...")); ACE_DEBUG((LM_NOTICE,"前置机版本[%s]",KSG_FULL_VERSION)); ACE_DEBUG((LM_NOTICE,"编译器 : %s",KSG_BUILD_INFO)); ACE_DEBUG((LM_NOTICE,"libraries ACE : %s , boost : %s , libcurl : %s" ,KSG_ACE_VERSION,KSG_BOOST_VERSION,KSG_CURL_VERSION)); ACE_DEBUG((LM_NOTICE,KSG_COPYRIGHT_STRING)); ACE_DEBUG((LM_INFO,"应用服务器[%s:%d]func[%d]",_configuration._drtpSvrIP.c_str() ,_configuration._drtpSvrPort,_configuration._drtpMainFunc)); ret = setupDrtpPool(); if(ret) { ACE_DEBUG((LM_ERROR,"初始化DRTP连接失败,返回码[%d]",ret)); return ret; } ret = enroll(); if(ret) { ACE_DEBUG((LM_ERROR,"前置机签到失败,错误码[%d]",ret)); return ret; } ret = downloadRuntimeParams(&_configuration); if(ret) { ACE_DEBUG((LM_ERROR,"下载运行参数失败,错误码[%d]",ret)); return ret; } ret = load_vendor_config(); if(ret) { return ret; } // 加载 loop 设备 /* ret = loadLoopDevice(); if(ret) { return ret; } */ ret = setupAllDevices(); if(ret) { return ret; } //ACE_DEBUG((LM_INFO,"前置机未加载设备!")); loadTaskExecutor(); _status = stRunning; ret = setup_all_acceptor(); // 2007-04-19 // 为防止调度线程在接收任务线程之后启动,当任务队列中只有一条任务的 // 情况下,可能造成的饥饿死锁,应先启动调度线程。但是这种处理办法并 // 不是最好的,应该增加信号量来控制任务采集线程晚于调度线程启动. ret = start_scheduler_algorithm(); if(ret) return ret; ret = startTimeScheduler(); if(ret) return ret; if(_configuration._start_bcc) { if(start_bcc_svr()) return -1; } if (_configuration._loadCardState) { if(loadCardState()) return -1; } ACE_DEBUG((LM_INFO,"启动前置机成功...")); // 进入主循环 update_max_blk_version(); int i = 0; while(_status == stRunning) { sleep_and_test(5000); report_status(); update_max_blk_version(); /* sleep_time += 5000; if(sleep_time > 1000 * 60 * 15) { KSGConfig config; config = _configuration; if(downloadRuntimeParams(&config) == 0) { ACE_DEBUG((LM_DEBUG,"更新前置机参数,gwid[%d]",config._gwId)); ACE_GUARD(ACE_Thread_Mutex,mon,_global_mutex); _configuration = config; } sleep_time = 0; } */ KSGThreadUtil::yield(); } ACE_DEBUG((LM_INFO,"正在停止前置机...")); if(_configuration._start_bcc) stop_bcc_svr(); stop_all_acceptor(); SchedulerGroup::Instance().TerminateAll(); SchedulerGroup::Instance().ClearAll(); // 使用循环等待方式,控制超时 /* while(_status == stRunning) { ACE_Time_Value tv(5); tv += ACE_OS::gettimeofday(); ACE_DEBUG((LM_DEBUG,"等待超时,准备重试")); } */ _status = stStop; //_devgrpSchd.TerminateAll(); stop_scheduler_algorithm(); ACE_DEBUG((LM_INFO,"主流程运行结束")); exit(); return 0; }
int KSGateway::run() { long sleep_time = 0; int ret = loadLocalConfig(); if(ret) return ret; ret = setupLogSystem(); if(ret) return ret; ACE_DEBUG((LM_INFO,"开始启动前置机...")); ACE_DEBUG((LM_INFO,"应用服务器[%s:%d]func[%d]",_configuration._drtpSvrIP.c_str() ,_configuration._drtpSvrPort,_configuration._drtpMainFunc)); ret = setupDrtpPool(); if(ret) { ACE_DEBUG((LM_ERROR,"初始化DRTP连接失败,返回码[%d]",ret)); return ret; } ret = enroll(); if(ret) { ACE_DEBUG((LM_ERROR,"前置机签到失败,错误码[%d]",ret)); return ret; } ret = downloadRuntimeParams(&_configuration); if(ret) { ACE_DEBUG((LM_ERROR,"下载运行参数失败,错误码[%d]",ret)); return ret; } ret = load_vendor_config(); if(ret) { return ret; } // 加载 loop 设备 /* ret = loadLoopDevice(); if(ret) { return ret; } */ ret = setupAllDevices(); if(ret) { return ret; } //ACE_DEBUG((LM_INFO,"前置机未加载设备!")); loadTaskExecutor(); _status = stRunning; ret = setup_all_proactor_acceptor(); // 2007-04-19 // 为防止调度线程在接收任务线程之后启动,当任务队列中只有一条任务的 // 情况下,可能造成的饥饿死锁,应先启动调度线程。但是这种处理办法并 // 不是最好的,应该增加信号量来控制任务采集线程晚于调度线程启动. ret = start_scheduler_algorithm(); if(ret) return ret; ret = startTimeScheduler(); if(ret) return ret; ACE_DEBUG((LM_INFO,"启动前置机成功...")); // 进入主循环 int i = 0; while(_status == stRunning) { KSGThreadUtil::Sleep(5000); sleep_time += 5000; if(sleep_time > 1000 * 60 * 15) { report_status(); KSGConfig config; config = _configuration; if(downloadRuntimeParams(&config) == 0) { ACE_DEBUG((LM_DEBUG,"更新前置机参数,gwid[%d]",config._gwId)); _configuration = config; } sleep_time = 0; } KSGThreadUtil::yield(); } ACE_DEBUG((LM_INFO,"正在停止前置机...")); stop_all_proactor_acceptor(); SchedulerGroup::Instance().TerminateAll(); // 使用循环等待方式,控制超时 /* while(_status == stRunning) { ACE_Time_Value tv(5); tv += ACE_OS::gettimeofday(); ACE_DEBUG((LM_DEBUG,"等待超时,准备重试")); } */ _status = stStop; //_devgrpSchd.TerminateAll(); stop_scheduler_algorithm(); ACE_DEBUG((LM_INFO,"主流程运行结束")); exit(); return 0; }