TransferCalculator.cpp
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2. *  Openmysee
  3. *
  4. *  This program is free software; you can redistribute it and/or modify
  5. *  it under the terms of the GNU General Public License as published by
  6. *  the Free Software Foundation; either version 2 of the License, or
  7. *  (at your option) any later version.
  8. *
  9. *  This program is distributed in the hope that it will be useful,
  10. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. *  GNU General Public License for more details.
  13. *
  14. *  You should have received a copy of the GNU General Public License
  15. *  along with this program; if not, write to the Free Software
  16. *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. *
  18. */
  19. // TransferCalculator.cpp: implementation of the TransferCalculator class.
  20. //
  21. //////////////////////////////////////////////////////////////////////
  22. #include "stdafx.h"
  23. #include "TransferCalculator.h"
  24. //////////////////////////////////////////////////////////////////////
  25. // Construction/Destruction
  26. //////////////////////////////////////////////////////////////////////
  27. TransferCalculator::TransferCalculator() {
  28. ClearTransferInfo();
  29. }
  30. TransferCalculator::~TransferCalculator() {
  31. }
  32. void TransferCalculator::GetTransferInfo(TransferInfo& ti) {
  33. ti.avgDownSpeed = avgDownSpeed;
  34. ti.avgUpSpeed = avgUpSpeed;
  35. ti.currDownSpeed = currDownSpeed;
  36. ti.currUpSpeed = currUpSpeed;
  37. ti.totalDownBytes = totalDownBytes;
  38. ti.totalUpBytes = totalUpBytes;
  39. }
  40. void TransferCalculator::ClearTransferInfo() {
  41. totalstartTime = tmpStartTime = timeGetTime();
  42. tmpOldDownBytes = tmpOldUpBytes = 0;
  43. totalDownBytes = totalUpBytes = 0;
  44. currDownSpeed = currUpSpeed = avgDownSpeed = avgUpSpeed = 0;
  45. }
  46. void TransferCalculator::GenerateTransferInfo(BOOL calAvg) {
  47. DWORD tNow = timeGetTime();
  48. /**********每三秒钟计算一次最近的下载/上传速度**********/
  49. if(tNow - tmpStartTime > 3000) {
  50. DWORD tmpTime = tNow - tmpStartTime;
  51. DWORD tmpBytes = (DWORD)(totalDownBytes - tmpOldDownBytes);
  52. if(tmpBytes <= 0 || tmpTime <= 0)
  53. currDownSpeed = 0;
  54. else
  55. currDownSpeed = ((float)tmpBytes*1024/tmpTime);
  56. tmpBytes = (DWORD)(totalUpBytes - tmpOldUpBytes);
  57. if(tmpBytes <= 0 || tmpTime <= 0)
  58. currUpSpeed = 0;
  59. else
  60. currUpSpeed = ((float)tmpBytes*1024/tmpTime);
  61. tmpStartTime = timeGetTime();
  62. tmpOldDownBytes = totalDownBytes;
  63. tmpOldUpBytes = totalUpBytes;
  64. }
  65. /**********有必要时计算一次总共的平均下载/上传速度**********/
  66. if(calAvg) {
  67. DWORD usedTime = (tNow - totalstartTime)/1000;
  68. if(usedTime) {
  69. avgDownSpeed = ((float)totalDownBytes/usedTime);
  70. avgUpSpeed = ((float)totalUpBytes/usedTime);
  71. }
  72. }
  73. }