Idhttp下载文件的问题,环境,XE2 Win10,求大神给予支持, 感谢!

PPL1998 2016-05-31 02:52:46
下面这个函数,在旧体窗体上用按扭点击测试,非常正常,怎么点都不会出错,可是在 线程中调用就不行了,
debug下,只要一执行 IdHTTP->Get(strUrl,FileStm); 这行,就会弹出CPU调试的窗口(汇编),而且怎么点
都点不完,直接运行也有问题,这个问题困惑我好几天了,一直弄不清是怎么个情况???求大神给予支持,
感谢!

//---下载服务器版本的文件
bool __fastcall ProgBase::DownloadServFile2(TIdHTTP *IdHTTP,TFileInfo FileInfo,String SavePathName)
{
TMemoryStream *FileStm;

try {
Json::Value JsonData;

JsonData =UTF8Encode(FileInfo.FileName).c_str();

UTF8String strReq =_jReq.CreateJsonReq(L"Hello",L"World",1,JsonData);
String strUrl =String(_Config.szUrl)+L"strJson="+HTTPEncode(strReq);

FileStm =new TMemoryStream() ;
IdHTTP->Get(strUrl,FileStm);

if (FileStm->Size ==FileInfo.ByteSize) { //---下载成功

_file.CreateFileW(ExtractFilePath(SavePathName));

if (!DirectoryExists(ExtractFilePath(SavePathName))) { //如果文件夹不存在,创建

if (!ForceDirectories(ExtractFilePath(SavePathName))) {

_LastErrS =FileInfo.FileName+L" 文件保存失败:文件夹"+ExtractFilePath(SavePathName)+",创建失败";
FileStm->Free();
return false;
}
}

FileStm->SaveToFile(SavePathName);
delete FileStm;
return true;
}else{ //---下载失败
_LastErrS =FileInfo.FileName+L" 文件下载失败,请查看服务器日志";
delete FileStm;
return false;
}

} catch (Exception &e) {

_LastErrS =e.Message;
delete FileStm;
return false;
}
}
...全文
175 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
银点 2016-05-31
  • 打赏
  • 举报
回复
引用 2 楼 binnygoal 的回复:
PS:我刚才找到了原因,我用了Idhttp的 work workbegin workend 三个事件,用来获取下载进度,是这三个 事件引起的上述错误。 但我需要用这三个事件,怎么用才能不出现上述的错误啊???
在你访问主线程窗口组件的函数里用区段把关键代码保护一下 TCriticalSection* cs = new TCriticalSection; cs->Acquire(); try{ //你的代码 } __finally { cs->Release(); }
银点 2016-05-31
  • 打赏
  • 举报
回复
子线程里使用了窗口主线程的组件,要做线程同步保证线程安全,否则就会出错。 给你提供一点方向,具体使用方法自己查看帮助文档即可: 可以使用使用重要区段TCriticalSection或者使用多重读、独占写的同步器 TMultiReadExclusiveWriteSynchronizer
PPL1998 2016-05-31
  • 打赏
  • 举报
回复
PS:我刚才找到了原因,我用了Idhttp的 work workbegin workend 三个事件,用来获取下载进度,是这三个 事件引起的上述错误。 但我需要用这三个事件,怎么用才能不出现上述的错误啊???
银点 2016-05-31
  • 打赏
  • 举报
回复
线程安全问题

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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