深入分析驴子系列 (3)emule CStatForServer 类分析

CStatForServer 本类的作用是计算平均速率

 

void CStatForServer::RecordCurrentRate(float uploadrate, float downloadrate)

{

     //   if reach record interval

     DWORD    dwCurTime = GetTickCount();

     if (dwCurTime - m_dwLastRecordTime < RECORD_INTERVAL_MS)

         return;

     m_dwLastRecordTime = dwCurTime;

     if (ULONG_MAX != m_ulRecordTimes_Download

         && IsAnyTaskRunning())

     {

         m_ulRecordTimes_Download++; // 次数加一

         m_fAverageDownloadSpeed = m_fAverageDownloadSpeed + ((downloadrate - m_fAverageDownloadSpeed) / m_ulRecordTimes_Download ); // 这点可能难理解       

     }

 

     if (ULONG_MAX != m_ulRecordTimes_Upload)

     {

         m_ulRecordTimes_Upload++;

          m_fAverageUploadSpeed = m_fAverageUploadSpeed + ( (uploadrate - m_fAverageUploadSpeed) /      m_ulRecordTimes_Upload);      

     

      }

 

}

m_fAverageDownloadSpeed = m_fAverageDownloadSpeed + ((downloadrate - m_fAverageDownloadSpeed) / m_ulRecordTimes_Download );

 

这个算法不太好懂,它的意思是前面n-1次的avg值,然后现在有了第n次的实际值,开始算第n次的avg值

 这样计算的结果与所有次的值累加起来然后除以次数结果是一样的。

 他这个算法是根据数学公式运算简化后的结果

 

m_fAverageDownloadSpeed*m_ulRecordTimes_Download=m_fAverageDownloadSpeed*m_ulRecordTimes_Download+downloadrate - m_fAverageDownloadSpeed;

》》 原计算公式两边都乘以次数

      

 

m_fAverageDownloadSpeed*m_ulRecordTimes_Download="所有次的累加和"

 

m_fAverageDownloadSpeed*m_ulRecordTimes_Download+downloadrate - m_fAverageDownloadSpeed

 

=m_fAverageDownloadSpeed*(m_ulRecordTimes_Download-1)+downloadrate;

 

》》 前n-1次的平均值*次数+本次的速度等于所有次的累加和

 

OPC 服务器开发包 
  http://shop66418560.taobao.com

 

转载于:https://www.cnblogs.com/wangok/archive/2011/05/03/2035471.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值