vc 中如何得到实时的下载速度?

chenyueqing_502 2011-04-27 11:25:23
实现一个下载功能,在下载对话框中实时显示下载速度,及下载剩余时间等。
...全文
420 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dreamcaihao 2012-12-29
  • 打赏
  • 举报
回复
ssyyo_bj 2011-04-28
  • 打赏
  • 举报
回复
目前正在学习WINSOCK,好资料啊!
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
所谓的实时下载速度也是按秒计算的,直接每秒计算一下当前下载量与上次记录的下载量便可得到从
上一秒到这一秒的下载数据量,这样实时下载速度就得出来了,至于剩余时间,可以将当前下载的数
据量与耗用的秒为单位的时间进行计算,然后通过需要下载的数据大小来预估剩余时间,公式这样:
剩余时间(秒)=须下载数据总大小/(当前耗用时间(秒)/当前下载大小)
然后把剩余时间转换一下格式就可以得到分钟、小时、天等信息了
visualwind 2011-04-27
  • 打赏
  • 举报
回复
要么用API查网络流量除以时间自己算,要么根据已下载数据除以时间计算。
下载剩余时间可以先得到总下载大小,在根据当前下载速度和剩余下载量估算。
Eleven 2011-04-27
  • 打赏
  • 举报
回复
yao050421103 2011-04-27
  • 打赏
  • 举报
回复
设置定时器,固定时间统计下载的数据量,从而得到下载速度,然后用当前的速度估算未来需要耗费的时间。

定时器:1s
文件大小:Size
已下载的部分:Downloaded
前一秒已下载的部分:Downloaded_old

剩余时间:(Size - DownLoad) / (Downloaded - Downloaded_old)
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
给你的我的定时器类

// TimerClass.cpp: implementation of the TimerClass class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "TimerClass.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

TimerClass::TimerClass()
{
TimerEvent = NULL;
State = FALSE;
Interval = 1000;
}

TimerClass::~TimerClass()
{

}

void TimerClass::Play()
{
if(State==FALSE){
State = TRUE;
ThreadHandle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)TimerThread,this,0,&ThreadID);
}
}

void TimerClass::Stop()
{
if(State == TRUE){
State=FALSE;
CloseHandle(ThreadHandle);
}
}

DWORD WINAPI TimerClass::TimerThread(LPVOID pParam)
{
DWORD NowTickCount;
DWORD SaveTickCount;
TimerClass * TimerObj;
TimerObj = (TimerClass *)pParam;
NowTickCount = GetTickCount();
SaveTickCount = NowTickCount;
while(TRUE){
Sleep(TimerObj->Interval);
if(TimerObj->State==FALSE){
break;
}
if(TimerObj->TimerEvent!=NULL){
TimerObj->TimerEvent();
}
}
return 0;
}


// TimerClass.h: interface for the TimerClass class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TIMERCLASS_H__C550E3B3_80DE_43B9_AD4E_0136C4870720__INCLUDED_)
#define AFX_TIMERCLASS_H__C550E3B3_80DE_43B9_AD4E_0136C4870720__INCLUDED_
typedef void(*CTIMEREVENT)();

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class TimerClass
{
public:
void Stop();
void Play();
DWORD Interval;
CTIMEREVENT TimerEvent;
TimerClass();
virtual ~TimerClass();

private:
HANDLE ThreadHandle;
BOOL State;
DWORD ThreadID;
protected:
static DWORD WINAPI TimerThread(LPVOID pParam);
};

#endif // !defined(AFX_TIMERCLASS_H__C550E3B3_80DE_43B9_AD4E_0136C4870720__INCLUDED_)

用起来很简单的

#include "stdafx.h"
#include "TimerClass.h"
MCTimerClass Timer1;
static void Timer1_Time(LONG ClassID);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
//...
Timer1.ClassID = (LONG)this; // 为 Timer1_Time 传递的参数,任何值都可以
Timer1.TimerEvent = Timer1_Time; // 相当于处理TimerEvent事件的函数指针
Timer1.Interval = 100; // 间隔时间,以毫秒为单位
Timer1.Play(); // 开始触发定时器
//...
}
// 根据上面的设置,每隔100毫秒触发一次该过程,并将 Timer1.ClassID 的值传递给 ClassID 参数
void Timer1_Time(LONG ClassID)
{
//定时器事件处理过程
}
chenyueqing_502 2011-04-27
  • 打赏
  • 举报
回复
void CALLBACK CMyTimer::TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
code;
}

void CMyTimer::SetMyTimer(UINT nElapse)
{
m_nTimerID = SetTimer(NULL, NULL, nElapse, TimerProc);
m_sTimeMap[m_nTimerID] = this;
}

class CMyTimer;
typedef CMap<UINT,UINT,CMyTimer*,CMyTimer*> CTimerMap;
class CMyTimer
{
public:
//设置定时器,nElapse表示时间间隔
void SetMyTimer(UINT nElapse);
//销毁该实例的定时器
void KillMyTimer();
//保存该实例的定时器标志值
UINT m_nTimerID;
//静态数据成员,映射表类,用于保存所有的定时器信息
static CTimerMap m_sTimeMap;
//静态成员函数,用于处理定时器的消息
static void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);

CMyTimer();
virtual ~CMyTimer();
};
我是使用定时器实现的,但为什么定时器没有启动。
内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统的建模与求解实践,帮助用户掌握MOPSO在实际工程问题的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧