这类读取和转换怎么使用进度条显示进度?

jackfeige 2009-03-05 08:57:30


char *m_pBMPBuffer=NULL;

DWORD m_nFileLen;

CFile file;
if( !file.Open( "f:\\111.rar", CFile::modeRead) ) //Open的时候文件大就比较慢是否也要考虑进度显示,不知道怎么获取时间长短

return;


m_nFileLen = file.GetLength();
m_pBMPBuffer = new char[m_nFileLen + 1];
if(!m_pBMPBuffer)
return;



if(file.ReadHuge(m_pBMPBuffer,m_nFileLen) != m_nFileLen)//读取时文件大也需要响应时间,不知道怎么获取时间长短

return;



if(m_pBMPBuffer == NULL)
{
AfxMessageBox("Error");
return;
}


pRst->Open("SELECT * FROM userphoto",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);

char *pBuf = m_pBMPBuffer;
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];


pRst->AddNew();
pRst->PutCollect("username",_variant_t("11111"));
pRst->PutCollect("old",atol("24"));
if(pBuf)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_nFileLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)m_nFileLen; i++)
SafeArrayPutElement (psa, &i, pBuf++);

varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
pRst->GetFields()->GetItem("photo")->AppendChunk(varBLOB);
MessageBox("baocun OK");
}//这部分文件大也需要时间但是试过m_progress.SetRange32(0,nFileLen);在for循环里使用m_progress.SetPos(i);结果增加了显示进度后比实际速度慢N倍
pRst->Update();//Update记录集也需要时间,不知道怎么获取时间长短




从开始读取文件到保存到SQL总时间如何用进度条显示?
...全文
80 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackfeige 2009-03-05
  • 打赏
  • 举报
回复
我上网找找相关资料,解决了就结贴
非常感谢oyljerry
oyljerry 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jackfeige 的回复:]
引用 5 楼 oyljerry 的回复:
引用 4 楼 jackfeige 的回复:
引用 2 楼 oyljerry 的回复:
更新记录集等这些你不好获取进度的时间,像这类情况,你可以做一个recursive的进度条,这样就不用考虑进度递增的情况了,只用让它循环走动...


小弟比较愚钝,可否详细讲述一下?

就是一个想windows XP开机画面中的进度条那种,来回往返走动的,不会有从0%- 100%的这种递增情况...


你的意思是在一开始的时候就显示进度…
[/Quote]
你简单的SetPos就可以啊,等到了100以后,又从0开始重新走动
其他的实现一般都是一个Gif的动画,让它Play()就可以了...
jackfeige 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 oyljerry 的回复:]
引用 4 楼 jackfeige 的回复:
引用 2 楼 oyljerry 的回复:
更新记录集等这些你不好获取进度的时间,像这类情况,你可以做一个recursive的进度条,这样就不用考虑进度递增的情况了,只用让它循环走动...



小弟比较愚钝,可否详细讲述一下?

就是一个想windows XP开机画面中的进度条那种,来回往返走动的,不会有从0%- 100%的这种递增情况...
[/Quote]

你的意思是在一开始的时候就显示进度条让他像windows XP开机画面中的进度条那种来回往返走动,然后在最后的时候关闭这个进度条?
感觉这方法可以,但不知道这类来回走动的进度条怎么创建啊?
oyljerry 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jackfeige 的回复:]
引用 2 楼 oyljerry 的回复:
更新记录集等这些你不好获取进度的时间,像这类情况,你可以做一个recursive的进度条,这样就不用考虑进度递增的情况了,只用让它循环走动...



小弟比较愚钝,可否详细讲述一下?
[/Quote]
就是一个想windows XP开机画面中的进度条那种,来回往返走动的,不会有从0%- 100%的这种递增情况...
jackfeige 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oyljerry 的回复:]
更新记录集等这些你不好获取进度的时间,像这类情况,你可以做一个recursive的进度条,这样就不用考虑进度递增的情况了,只用让它循环走动...
[/Quote]


小弟比较愚钝,可否详细讲述一下?
jackfeige 2009-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 schlafenhamster 的回复:]
DWORD dwStart = GetTickCount();
;;;;;;
DWORD dwEnd = GetTickCount();
dwEnd-dwStart 就是总时间.
[/Quote]

这样得到时间的话也无法操作进度条啊
oyljerry 2009-03-05
  • 打赏
  • 举报
回复
更新记录集等这些你不好获取进度的时间,像这类情况,你可以做一个recursive的进度条,这样就不用考虑进度递增的情况了,只用让它循环走动...
schlafenhamster 2009-03-05
  • 打赏
  • 举报
回复
DWORD dwStart = GetTickCount();
;;;;;;
DWORD dwEnd = GetTickCount();
dwEnd-dwStart 就是总时间.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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