用TIdFTP下载一个比较大的文件时候,如何让使用者知道程序没有死机?

fangrk 2003-09-24 04:00:07
我觉得可以采用下列方法,比如显示下载进度,或者当前下载速率,或者当前已经使用了多少时间。不过不知道怎么做。恳请各位帮忙。
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
shally5 2003-09-25
  • 打赏
  • 举报
回复
定义全局变量
TDateTime STime;
int AverageSpeed;
long BytesToTransfer ;
int FileLenCount;
int FileLenCurrentCount;
bool AbortTransfer;
在发送时记录起始时间
void __fastcall TForm1::IdFTP1WorkBegin(TObject *Sender,
TWorkMode AWorkMode, const int AWorkCountMax)
{
STime = Now();
if (AWorkCountMax > 0)
{
ProgressBar1->Max = AWorkCountMax;

}
else
{
ProgressBar1->Max = BytesToTransfer;
}
AverageSpeed = 0;
FileLenCount=AWorkCountMax/1024;
}
//结束时
void __fastcall TForm1::IdFTP1WorkEnd(TObject *Sender, TWorkMode AWorkMode)
{
StatusBar1->Panels->Items[2]->Text = "Transfer complete.";
BytesToTransfer = 0;
ProgressBar1->Position = 0;
AverageSpeed = 0;
FileLenCount=0;
FileLenCurrentCount=0;
StatusBar1->Panels->Items[3]->Text="";
}


//发送时的平均速度或/接收时平均速度
void __fastcall TForm1::IdFTP1Work(TObject *Sender, TWorkMode AWorkMode,
const int AWorkCount)
{
AnsiString s;
TDateTime TotalTime;
WORD H, M, Sec, MS;
double DLTime;

TotalTime = Now() - STime;
DecodeTime(TotalTime, H, M, Sec, MS);
Sec = Sec + M * 60 + H * 3600;
DLTime = Sec + MS / 1000;
FileLenCurrentCount=AWorkCount/1024;
if (DLTime > 0)
AverageSpeed = (AverageSpeed + (AWorkCount / 1024) / DLTime) / 2;

s = FormatFloat("0.00 KB/s", AverageSpeed);

switch (AWorkMode)
{ case wmRead:
{ StatusBar1->Panels->Items[2]->Text = "Download speed " + s;
if(FileLenCurrentCount>0)
StatusBar1->Panels->Items[3]->Text="下载 "+IntToStr(FileLenCurrentCount)+" KB 总计 "+IntToStr(FileLenCount)+" KB";
break;
}
case wmWrite:
{
StatusBar1->Panels->Items[2]->Text = "Upload speed " + s;
if(FileLenCurrentCount>0)
StatusBar1->Panels->Items[3]->Text="上传 "+IntToStr(FileLenCurrentCount)+" KB 总计 "+IntToStr(FileLenCount)+" KB";
}
};

if (AbortTransfer)
IdFTP1->Abort();

ProgressBar1->Position = AWorkCount;
AbortTransfer = false;
}
shally5 2003-09-25
  • 打赏
  • 举报
回复
在使用idFTP时,只作进度条显示上下载进度是不行的,它动不了的。
还要加入IdAntiFreeze控件,才能行。。。。。。
fathappy 2003-09-25
  • 打赏
  • 举报
回复
同意,用进度条
fangrk 2003-09-25
  • 打赏
  • 举报
回复
好,先给分,明天拷贝去试
fangrk 2003-09-25
  • 打赏
  • 举报
回复
好,先给分,明天拷贝去试
meCAD 2003-09-24
  • 打赏
  • 举报
回复
做个进度条不就行了.
Santos 2003-09-24
  • 打赏
  • 举报
回复
能获得当前已经收到的字节数,下面的运算自己做吧:)
内容概要:本文围绕“基于共享储能服务的智能楼宇双层优化配置”展开研究,提出了一种结合上层共享储能配置优化与下层楼宇内部能源调度优化的双层协同模型,通过Matlab代码实现,旨在提升智能楼宇在复杂能源环境下的运行效率与经济性。研究充分考虑光伏出力、负荷需求等不确定性因素,引入多维核密度估计、场景生成与削减等技术进行不确定性建模,并融合需求响应、微电网调度等先进理念,实现了对综合能源系统中储能资源的高效配置与动态调控,具有较强的理论深度与工程应用价值。; 适合人群:具备电力系统、可再生能源、优化算法或综合能源系统等相关背景,从事科研、工程应用或课题研究的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于智能楼宇、园区微电网、虚拟电厂等场景中的储能规划与运行优化;②支撑高水平学术论文(如EI/SCI)的复现、课题申报、毕业设计及实际项目的双层优化建模与求解实践。; 阅读建议:建议结合提供的Matlab代码进行实操演练,重点理解双层优化架构的设计逻辑、求解策略(如Benders分解、主从博弈等)及不确定性处理方法,同时可参考文中关联技术(如场景生成、需求响应)拓展研究思路与应用场景。

13,872

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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