Exemplo n.º 1
0
void CServerRoot::exitTimer()
{
	if (m_stopping){
		return;
	}

	m_stopping = true;
	CCritLocker clLock(this->getRootLock());
	m_clExitEvent.reset_event();
	denyServices();
}
Exemplo n.º 2
0
// 保持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;
			}
		}

		/*处理控制台数据*/
		/*处理控制台输入*/
	}
}