www.pudn.com > myseelite_2007_06_28.zip > TransferCalculator.cpp


/* 
*  Openmysee 
* 
*  This program is free software; you can redistribute it and/or modify 
*  it under the terms of the GNU General Public License as published by 
*  the Free Software Foundation; either version 2 of the License, or 
*  (at your option) any later version. 
* 
*  This program is distributed in the hope that it will be useful, 
*  but WITHOUT ANY WARRANTY; without even the implied warranty of 
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
*  GNU General Public License for more details. 
* 
*  You should have received a copy of the GNU General Public License 
*  along with this program; if not, write to the Free Software 
*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
* 
*/ 
// TransferCalculator.cpp: implementation of the TransferCalculator class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "TransferCalculator.h" 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
TransferCalculator::TransferCalculator() { 
	ClearTransferInfo(); 
} 
 
TransferCalculator::~TransferCalculator() { 
} 
 
void TransferCalculator::GetTransferInfo(TransferInfo& ti) { 
	ti.avgDownSpeed = avgDownSpeed; 
	ti.avgUpSpeed = avgUpSpeed; 
	ti.currDownSpeed = currDownSpeed; 
	ti.currUpSpeed = currUpSpeed; 
	ti.totalDownBytes = totalDownBytes; 
	ti.totalUpBytes = totalUpBytes; 
} 
 
void TransferCalculator::ClearTransferInfo() { 
	totalstartTime = tmpStartTime = timeGetTime(); 
	tmpOldDownBytes = tmpOldUpBytes = 0; 
	totalDownBytes = totalUpBytes = 0; 
	currDownSpeed = currUpSpeed = avgDownSpeed = avgUpSpeed = 0; 
} 
 
void TransferCalculator::GenerateTransferInfo(BOOL calAvg) { 
	DWORD tNow = timeGetTime(); 
	/**********每三秒钟计算一次最近的下载/上传速度**********/ 
	if(tNow - tmpStartTime > 3000) { 
		DWORD tmpTime = tNow - tmpStartTime; 
		DWORD tmpBytes = (DWORD)(totalDownBytes - tmpOldDownBytes); 
		if(tmpBytes <= 0 || tmpTime <= 0) 
			currDownSpeed = 0; 
		else 
			currDownSpeed = ((float)tmpBytes*1024/tmpTime); 
 
		tmpBytes = (DWORD)(totalUpBytes - tmpOldUpBytes); 
		if(tmpBytes <= 0 || tmpTime <= 0) 
			currUpSpeed = 0; 
		else 
			currUpSpeed = ((float)tmpBytes*1024/tmpTime); 
 
		tmpStartTime = timeGetTime(); 
		tmpOldDownBytes = totalDownBytes; 
		tmpOldUpBytes = totalUpBytes; 
	} 
 
	/**********有必要时计算一次总共的平均下载/上传速度**********/ 
	if(calAvg) { 
		DWORD usedTime = (tNow - totalstartTime)/1000; 
		if(usedTime) { 
			avgDownSpeed = ((float)totalDownBytes/usedTime); 
			avgUpSpeed = ((float)totalUpBytes/usedTime); 
		} 
	} 
}