📄 cmsmanager.cpp
字号:
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 + -