Ejemplo n.º 1
0
// 保持server
void CServerRoot::maintenances()
{
	while (!m_bExitServices)
	{
		CLog::print("[CServerRoot::maintenances],主线程保持server线程……");
		if (m_clExitEvent.wait_event(1000)){
			exitTimer();
		}

		if (m_stopping){
			if (canExitServices()){
				m_bExitServices = true;

				CTimer::GetSingleton().stopTimer();
			}
		}

		/*处理控制台数据*/
		/*处理控制台输入*/
	}
}
Ejemplo 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;
			}
		}

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