⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmsmanager.cpp

📁 这是cdma2000的一个分组调度算法实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	float fMeanSPDCCHPER=float(m_lErrorSPDCCH)/m_lRealTotalSP;
	f.WriteString("SPDCCH分组错误概率_所有数据用户的结果\n");
    _gcvt(fMeanSPDCCHPER,8,buf);                   //将浮点数转换成字符串
	f.WriteString(buf);
    f.WriteString("\n");


	f.Close();
}

//数据用户吞吐量统计函数
//completed by ms in 3.28
void CMsManager::MsThroughputStatistics()
//输出文件为throughputservice.txt
{
	POSITION pos;
	float throughput,distance;
	CStdioFile f;
	int i;
	CHttpDataMs *pHttpDataMs=NULL;
	CFtpDataMs *pFtpDataMs=NULL;
	char buf[50];

	/* 打开数据文件准备写*/
	if(!f.Open(m_sMobileThroughputServiceFile,
		CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
	#ifdef _DEBUG
		afxDump<<"Unable to open file"<<"\n";	//异常处理
	#endif
	}

	f.SeekToEnd();                             
		//使文件指针指向文件尾部,输出数据可以在文件尾部接着写

	i=0;
	f.WriteString("********************************************\n");
    f.WriteString("HTTP用户吞吐量和最近基站距离\n");
//zdy
	f.WriteString("用户id");
	f.WriteString("\t\t");
	f.WriteString("吞吐量_bit/s");
	f.WriteString("\t\t");
	f.WriteString("成功传输数据量_bits");
	f.WriteString("\t\t");
	f.WriteString("和最近基站的距离_km");
	f.WriteString("\n");
///


	//开始对HTTP用户进行循环 	
	pos=m_HttpDataList.GetHeadPosition(); 
    
		//获得HTTP数据用户链表的第一个节点的位置
    while(pos!=NULL)                           
	{
		i++;
		pHttpDataMs=m_HttpDataList.GetNext(pos);
        pHttpDataMs->ThroughputCalculate(); 
		
			//调用CHttpDataMs类对象的吞吐量计算函数,
			//计算每一HTTP用户的吞吐量 
		throughput=pHttpDataMs->GetThroughputOfService();
		
			//计算数据用户到距离最近的基站的距离,即数据用户
			//到所属小区基站的距离		
		distance=DistanceCaculte(pHttpDataMs->GetMsLocation(),
			pHttpDataMs->GetLocationSector());


			//文件处理,将吞吐量和距离写入文件
				
		_gcvt(i,8,buf);
		f.WriteString(buf);
		f.WriteString("\t\t");
		_gcvt(throughput,8,buf);             //将浮点数转换成字符串
		f.WriteString(buf);
		f.WriteString("\t\t");
		_gcvt(pHttpDataMs->GetTotalGoodBitsNum(),8,buf);
		f.WriteString(buf);
		f.WriteString("\t\t");
		_gcvt(distance,8,buf);
		f.WriteString(buf);
		f.WriteString("\n");
	}

	//开始对FTP用户进行循环,与对HTTP用户的操作相同
	i=0;
	f.WriteString("\n\n********************************************\n");
    f.WriteString("FTP用户吞吐量和最近基站距离\n");
//zdy
	f.WriteString("用户id");
	f.WriteString("\t\t");
	f.WriteString("吞吐量_bit/s");
	f.WriteString("\t\t");
	f.WriteString("成功传输数据量_bits");
	f.WriteString("\t\t");
	f.WriteString("和最近基站的距离_km");
	f.WriteString("\n");
///

	pos=m_FtpDataList.GetHeadPosition();
    while(pos!=NULL)
	{
		i++;
		pFtpDataMs=m_FtpDataList.GetNext(pos);
        pFtpDataMs->ThroughputCalculate();
		throughput=pFtpDataMs->GetThroughputOfService();
        distance=DistanceCaculte(pFtpDataMs->GetMsLocation(),pFtpDataMs->GetLocationSector());
		
		_gcvt(i,8,buf);
		f.WriteString(buf);
		f.WriteString("\t\t");
		_gcvt(throughput,8,buf);
		f.WriteString(buf);
		f.WriteString("\t\t");
		_gcvt(pFtpDataMs->GetTotalGoodBitsNum(),8,buf);
		f.WriteString(buf);
		f.WriteString("\t\t");
		_gcvt(distance,8,buf);
		f.WriteString(buf);
		f.WriteString("\n");
	} 

    f.Close();               //关闭文件

}
/*
void CMsManager::MsC2IStatistics()
//输出文件为mobilec2i.txt
{
	POSITION pos;
	float CurrentSlotC2I,distance;
	CStdioFile f;	
	CVoiceMs *pVoiceMs=NULL;
	CHttpDataMs *pHttpDataMs=NULL;
	CFtpDataMs *pFtpDataMs=NULL;
	char buf[50];

	// 打开数据文件准备写
	if(!f.Open(m_sMobileC2IFile,
		CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
	#ifdef _DEBUG
		afxDump<<"Unable to open file"<<"\n";	//异常处理
	#endif
	}

	f.SeekToEnd();                             
		//使文件指针指向文件尾部,输出数据可以在文件尾部接着写 
    f.WriteString("话音用户C/I和最近基站距离\n");
//zdy
	f.WriteString("C2I_dB");
	f.WriteString("\t\t\t");
	f.WriteString("Distance_km");
	f.WriteString("\n");
//
	//开始对话音用户进行循环 	
	pos=m_VoiceList.GetHeadPosition();      
		//获得话音用户链表的第一个节点的位置

    while(pos!=NULL)                           
	{
		pVoiceMs=m_VoiceList.GetNext(pos); 
		CurrentSlotC2I=pVoiceMs->GetC2I();		
			//计算话音用户到距离最近的基站的距离,
			//即话音用户到所属小区基站的距离		
    	distance=DistanceCaculte(pVoiceMs->GetMsLocation(),
			pVoiceMs->GetLocationSector());
			//文件处理,将C/I和距离写入文件
		
		_gcvt(CurrentSlotC2I,8,buf);             //将浮点数转换成字符串
		f.WriteString(buf);
		f.WriteString("\t\t\t");
		_gcvt(distance,8,buf);
		f.WriteString(buf);
		f.WriteString("\n");
	}

	//开始对HTTP用户进行循环,与对话音用户的操作相同	
    f.WriteString("HTTP用户C/I和最近基站距离\n");
//zdy
	f.WriteString("当前的时隙数:");
	_gcvt(m_iSlotCurrentNum,8,buf);             
	f.WriteString(buf);
	f.WriteString("\n");
	f.WriteString("C2I_dB");
	f.WriteString("\t\t\t");
	f.WriteString("Distance_km");
	f.WriteString("\n");
//
	pos=m_HttpDataList.GetHeadPosition();    
    while(pos!=NULL)                           
	{
		pHttpDataMs=m_HttpDataList.GetNext(pos); 
		CurrentSlotC2I=pHttpDataMs->GetCurrentSlotC2I();				
    	distance=DistanceCaculte(pHttpDataMs->GetMsLocation(),pHttpDataMs->GetLocationSector());
		_gcvt(CurrentSlotC2I,8,buf);             
		f.WriteString(buf);
		f.WriteString("\t\t\t");
		_gcvt(distance,8,buf);
		f.WriteString(buf);
		f.WriteString("\n");
	}

	//开始对FTP用户进行循环,与对话音用户的操作相同 
    f.WriteString("FTP用户C/I和最近基站距离\n");
//zdy
	f.WriteString("当前的时隙数:");
	_gcvt(m_iSlotCurrentNum,8,buf);             
	f.WriteString(buf);
	f.WriteString("\n");
	f.WriteString("C2I_dB");
	f.WriteString("\t\t\t");
	f.WriteString("Distance_km");
	f.WriteString("\n");
//
	pos=m_FtpDataList.GetHeadPosition();
    while(pos!=NULL)
	{
		pFtpDataMs=m_FtpDataList.GetNext(pos);
		CurrentSlotC2I=pFtpDataMs->GetCurrentSlotC2I();
        distance=DistanceCaculte(pFtpDataMs->GetMsLocation(),
			pFtpDataMs->GetLocationSector());
		_gcvt(CurrentSlotC2I,8,buf);
		f.WriteString(buf);
		f.WriteString("\t\t\t");
		_gcvt(distance,8,buf);
		f.WriteString(buf);
		f.WriteString("\n");
	} 

    f.Close();               //关闭文件
}
*/
//////// Added by zdy on 20010727 /////////////////////////////////
void CMsManager::MsDelayStatistics()
//把各个http移动台的时延数据输出至文件MsDelay.txt
{
	POSITION pos;
	CStdioFile f;	
	CHttpDataMs *pHttpDataMs=NULL;
	char buf[50];

	/* 打开数据文件准备写*/
	if(!f.Open("MsDelay.txt",
		CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
	{
	#ifdef _DEBUG
		afxDump<<"Unable to open file"<<"\n";	//异常处理
	#endif
	}

	f.SeekToEnd();                             
		//使文件指针指向文件尾部,输出数据可以在文件尾部接着写 
 
	//开始对HTTP用户进行循环
	f.WriteString("http用户时延和吞吐量统计\n");

 //zdy
	f.WriteString("用户id");
	f.WriteString("\t");
	f.WriteString("平均分组时延_s");
	f.WriteString("\t");
	f.WriteString("平均PacketCall时延_s");
	f.WriteString("\t");
	f.WriteString("PC的吞吐量_bit/s");
	f.WriteString("\t");
	f.WriteString("和最近基站的距离_km");

	f.WriteString("\n");
//
	int iID=1;		//用户的id
	float fAveragedPDelay=0.;	//每个用户的平均packet时延
	float fAveragedPCDelay=0.;	//每个用户的平均PacketCall时延
	float fDistance=0.;			//和最近基站的距离
	float fPCTroughput=0.;
	pos=m_HttpDataList.GetHeadPosition();    
    while(pos!=NULL)                           
	{
		pHttpDataMs=m_HttpDataList.GetNext(pos); 

		pHttpDataMs->AveragedPacketDelayCalculate();	//计算每个用户的平均packet时延
		fAveragedPDelay=pHttpDataMs->GetAveragedPacketDelay();

		pHttpDataMs->AveragedPCDelayCalculate();		//计算每个用户的平均PacketCall时延
		fAveragedPCDelay=pHttpDataMs->GetAveragedPCDelay();

		pHttpDataMs->PCThroughputCalculate();
		fPCTroughput=pHttpDataMs->GetPCThroughput();   //计算每个用户的packet call吞吐量

	   	fDistance=DistanceCaculte(pHttpDataMs->GetMsLocation(),pHttpDataMs->GetLocationSector());

		_gcvt(iID,8,buf);             
		f.WriteString(buf);
		f.WriteString("\t");

		_gcvt(fAveragedPDelay,8,buf);
		f.WriteString(buf);
		f.WriteString("\t");

		_gcvt(fAveragedPCDelay,8,buf);
		f.WriteString(buf);
		f.WriteString("\t");

		_gcvt(fPCTroughput,8,buf);             
		f.WriteString(buf);
		f.WriteString("\t");

		_gcvt(fDistance,8,buf);
		f.WriteString(buf);
		f.WriteString("\n");

		iID++;
	}

    f.Close();               //关闭文件
}


//////// Added by oyh on 20010508 /////////////////////////////////
void CMsManager::UpdateSectorPower()
{
	POSITION pos;
	CSector* pSector=NULL;
	CVoiceMs* pVoiceMs=NULL;

	pos=m_VoiceList.GetHeadPosition();
	while(pos!=NULL)
	{
		pVoiceMs=m_VoiceList.GetNext(pos);
		pVoiceMs->UpdateActiveSetPower();
	}
}


//Added by oyh on 20010508
//Update mobile's neighbor sets and candidate sets
void CMsManager::UpdateSetPower()
{
	POSITION pos;

	CVoiceMs* pVoiceMs=NULL;
	CHttpDataMs* pHttpDataMs=NULL;
	CFtpDataMs* pFtpDataMs=NULL;

	//////////////////////////////////////////////////////////////////
	pos=m_VoiceList.GetHeadPosition();
	while(pos!=NULL)
	{
		pVoiceMs=m_VoiceList.GetNext(pos);
		pVoiceMs->UpdateNeighborSet();
		pVoiceMs->UpdateCandidateSet();
	}

	pos=m_HttpDataList.GetHeadPosition();
	while(pos!=NULL)
	{
		pHttpDataMs=m_HttpDataList.GetNext(pos);
		pHttpDataMs->UpdateNeighborSet();
		pHttpDataMs->UpdateCandidateSet();
	}
	
	pos=m_FtpDataList.GetHeadPosition();
	while(pos!=NULL)
	{
		pFtpDataMs=m_FtpDataList.GetNext(pos);
		pFtpDataMs->UpdateNeighborSet();
		pFtpDataMs->UpdateCandidateSet();
	}

	
	
}

//////////////////////////////////////////////////////////////////








///////////////////////////////////////////////////////////////////////////
int CMsManager::GetVoiceNumPerSector()
{
	return m_iVoiceNumPerSector;
}

void CMsManager::SetVoiceNumPerSector(int ip)
{
	m_iVoiceNumPerSector=ip;
}

int CMsManager::GetDataNumPerSector()
{
	return m_iDataNumPerSector;
}

void CMsManager::SetDataNumPerSector(int ip)
{
	m_iDataNumPerSector=ip;
}

float CMsManager::GetFractionHttp()
{
	return m_fFractionHttp;
}

void CMsManager::SetFractionHttp(float fp)
{
	m_fFractionHttp=fp;
}

float CMsManager::GetFractionFtp()
{
	return m_fFractionFtp;
}

void CMsManager::SetFractionFtp(float fp)
{
	m_fFractionFtp=fp;
}






//
char* CMsManager::GetSystemMeanThroughputFile()
{
	return m_sSystemMeanThroughputFile;
}

void CMsManager::SetSystemMeanThroughputFile(char* sp)
{
	strcpy(m_sSystemMeanThroughputFile,sp);
}

char* CMsManager::GetSystemMeanPERFile()
{
	return m_sSystemMeanPERFile;
}

void CMsManager::SetSystemMeanPERFile(char* sp)
{
	strcpy(m_sSystemMeanPERFile,sp);
}



char* CMsManager::GetMobileC2IFile()
{
	return m_sMobileC2IFile;
}

void CMsManager::SetMobileC2IFile(char* sp)
{
	strcpy(m_sMobileC2IFile,sp);
}

char* CMsManager::GetMobileThroughputServiceFile()
{
	return m_sMobileThroughputServiceFile;
}

void CMsManager::SetMobileThroughputServiceFile(char* sp)
{
	strcpy(m_sMobileThroughputServiceFile,sp);
}

char* CMsManager::GetMobileThroughputPacketCallFile()
{
	return m_sMobileThroughputPacketCallFile;
}

void CMsManager::SetMobileThroughputPacketCallFile(char* sp)
{
	strcpy(m_sMobileThroughputPacketCallFile,sp);
}

char* CMsManager::GetVoiceFile()
{
	return m_sVoiceFile;
}

void CMsManager::SetVoiceFile(char* sp)
{
	strcpy(m_sVoiceFile,sp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -