void CServerRoot::exitTimer() { if (m_stopping){ return; } m_stopping = true; CCritLocker clLock(this->getRootLock()); m_clExitEvent.reset_event(); denyServices(); }
// 保持server void CServerRoot::maintenances() { //保持服务 没有信号表示服务继续运行 while(!m_clMaintainEvent.wait_event(1000)) { // 触发退出事件,server开始拒绝服务,并断开所有连接 if (m_clExitEvent.wait_event(0)){ if (m_bExitServices) CLog::warn("正在退出,请勿重复操作……"); CCritLocker clLock(this->getRootLock()); m_bExitServices = true; m_clExitEvent.reset_event(); denyServices(); } //能否退出,每1s循环检查,是否已经退出完成 if (m_bExitServices){ bool bCanExit = false; { CCritLocker clLock(getRootLock()); if (canExitServices()) bCanExit = true; } if (bCanExit){ m_clMaintainEvent.set_event(); CTimer::GetSingleton().stopTimer(); return; } } /*处理控制台数据*/ /*处理控制台输入*/ } }