当前位置: 首页>>代码示例>>C++>>正文


C++ Zone::getPCCount方法代码示例

本文整理汇总了C++中Zone::getPCCount方法的典型用法代码示例。如果您正苦于以下问题:C++ Zone::getPCCount方法的具体用法?C++ Zone::getPCCount怎么用?C++ Zone::getPCCount使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Zone的用法示例。


在下文中一共展示了Zone::getPCCount方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: outputLoadValue

void ZoneGroupManager::outputLoadValue()
	throw(Error)
{
	//------------------------------------------------------------------
	// ZoneGroup load
	//------------------------------------------------------------------
	ofstream file("loadBalance.txt", ios::app);

	VSDateTime current = VSDateTime::currentDateTime();
	file << current.toString() << endl;

	map< ZoneGroupID_t , ZoneGroup* >::const_iterator itr;

	for (itr = m_ZoneGroups.begin() ; itr != m_ZoneGroups.end() ; itr ++) 
	{
		ZoneGroup* pZoneGroup = itr->second;
		file << "[" << (int)pZoneGroup->getZoneGroupID() << "] ";

		const map< ZoneID_t, Zone* >& zones = pZoneGroup->getZones();
		map< ZoneID_t, Zone* >::const_iterator iZone;

		// 각 Zone의 loadValue를 구한다.
		int totalLoad = 0;
		for (iZone=zones.begin(); iZone!=zones.end(); iZone++)
		{
			Zone* pZone = iZone->second;

			int load = pZone->getLoadValue();
			int playerLoad = pZone->getPCCount();

			file << (int)pZone->getZoneID() << "(" << load << ", " << playerLoad << ") ";

			totalLoad += load;
		}

		file << " = " << totalLoad << endl;

	}

	file << endl;
	file.close();
}
开发者ID:jun199004,项目名称:server,代码行数:42,代码来源:ZoneGroupManager.cpp

示例2: min

//---------------------------------------------------------------------------
// make Balanced LoadInfo
//---------------------------------------------------------------------------
//
// bForce : balacing할 필요가 없다고 판단되는 경우에도 
//          강제로 ZoneGroup을 balancing할 경우에 사용된다.
//
// Zone마다의 10초간의 loop 처리 회수를 load값으로 한다.
// 계산에 편의를 위해서 실제 load는 다음과 같의 정의한다.
//
//     load = (loadLimit - load)*loadMultiplier;
//
//---------------------------------------------------------------------------
bool 	ZoneGroupManager::makeBalancedLoadInfo(LOAD_INFOS& loadInfos, bool bForce)
	throw(Error)
{
	const int maxGroup  		= m_ZoneGroups.size();	// zoneGroup 수
	//const int loadMultiplier 	= 5;					// load 가중치 - 느린 애들을 더 느리다...라고 하기 위한 것.
	const int loadLimit 		= 500;					// load 값 제한 - sleep에 의해서 제한돼서 루프 처리회수 500이 최고다.
	const int stableLoad 		= 120;					// 안정적인 load - 이 정도면 balancing이 필요없다고 생각되는 수준
	//const int minLoadGap 		= 20 * loadMultiplier;	// load balancing을 하기 위한 load 차이 - 최고~최저의 차이가 일정 값 이상이어야지 balancing이 의미있다.
	const int minLoadGap 		= 20;	// load balancing을 하기 위한 load 차이 - 최고~최저의 차이가 일정 값 이상이어야지 balancing이 의미있다.
	const int averageLoadPercent = 90;					// 한 group의 load % 제한. 100으로 해도 되겠지만 90정도가 괜찮은거 같다.

	int i;

	//LOAD_INFOS 	loadInfos;
	GROUPS		groups;

	map< ZoneGroupID_t , ZoneGroup* >::const_iterator itr;

	// 전체 load
	int totalLoad = 0;


	//------------------------------------------------------------------
	// ZoneGroup마다 loadValue 조사 
	//------------------------------------------------------------------
	int maxLoadValue = 0;
	int minLoadValue = loadLimit;
	for (itr = m_ZoneGroups.begin() ; itr != m_ZoneGroups.end() ; itr ++) 
	{
		ZoneGroup* pZoneGroup = itr->second;

		const map< ZoneID_t, Zone* >& zones = pZoneGroup->getZones();
		map< ZoneID_t, Zone* >::const_iterator iZone;

		// 각 Zone의 loadValue를 구한다.
		for (iZone=zones.begin(); iZone!=zones.end(); iZone++)
		{
			Zone* pZone = iZone->second;

			int load = pZone->getLoadValue();
			load = min(load, loadLimit);

			// 10~500
			maxLoadValue = max(maxLoadValue, load);
			minLoadValue = min(minLoadValue, load);

			// 숫자 적은게 느린 거다.
			// 계산의 편의를 위해서 숫자를 뒤집?는다. --> 큰 숫자 부하가 큰 걸로 바꾼다.
			// player숫자를 부하가중치로 사용한다.
			// playerLoad = 1 ~ 20정도?
			int playerLoad = pZone->getPCCount()/10;
			playerLoad = max(1, playerLoad);
			//load = (loadLimit - load)*loadMultiplier;	// 부하 가중치
			load = (loadLimit - load)*playerLoad;	// 부하 가중치

			LoadInfo* pInfo = new LoadInfo;
			pInfo->id 			= pZone->getZoneID();
			pInfo->oldGroupID 	= itr->first;
			pInfo->groupID 		= -1;
			pInfo->load 		= load;

			// 부하와 zoneID로 이루어진 key
			DWORD key = (load << 8) | pInfo->id;

			loadInfos[key] = pInfo;

			totalLoad += load;
		}
	}

	//------------------------------------------------------------------
	//
	// balancing이 필요한지 확인
	//
	//------------------------------------------------------------------
	if (!bForce)
	{
		int loadBoundary = stableLoad;
		//int loadBoundary = (loadLimit - stableLoad ) * loadMultiplier;

		// 부하 한계 수치보다 작거나
		// min~max 부하 수치 차이가 일정수치 이하이면
		// load balancing할 필요가 없다.
		//if (maxLoad <= loadBoundary
		if (minLoadValue >= loadBoundary
			|| maxLoadValue-minLoadValue <= minLoadGap)
		{
//.........这里部分代码省略.........
开发者ID:jun199004,项目名称:server,代码行数:101,代码来源:ZoneGroupManager.cpp


注:本文中的Zone::getPCCount方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。