小弟写了一个多线程下载的程序,总是有死循环的迹象,不过我认为可能是产生了死锁。可是当单步跟踪的时候产生错误大家帮小弟看看啊:  
          unit   IndyMThread;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls,   ComCtrls,   IdBaseComponent,   IdComponent,  
      IdTCPConnection,   IdTCPClient,   IdHTTP;  
   
  type  
      TForm1   =   class(TForm)  
          BtnDowload:   TButton;  
          BtnCancel:   TButton;  
          EdtURL:   TEdit;  
          Label1:   TLabel;  
          REdtMess:   TRichEdit;  
          IdHTTP1:   TIdHTTP;  
          procedure   BtnDowloadClick(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
      TThreadLoad   =   class(TThread)  
          private  
            {private   declatation}  
              m_sURL:string;  
          protected  
            {protected   declaration}  
                procedure       GetFile(var   sFileName:string);  
                procedure       REditAdd;  
                procedure       Execute;override;  
          public  
            {Public   declarations   }  
              REdt:TRichEdit;  
              Constructor   Create(bWait:Boolean;const   URL:string);  
   
              //   Destructor     Destroy;override;  
      end;  
  var  
      Form1:   TForm1;  
      m_ArrayImage:   Array[0..4]of   string;  
      g_i:integer;  
      CriticalSec:TRTLCriticalSection;  
  implementation  
   
  {$R   *.dfm}  
  procedure   TThreadLoad.GetFile(var   sFileName:string);  
  var  
      i:integer;  
  begin  
      for   i:=0   to   4   do  
          begin  
              if   m_arrayimage[i]=''   then   continue;  
              sFileName:=m_arrayimage[i];  
              m_arrayimage[i]:='';  
              exit;  
          end;  
  end;  
   
  procedure   TThreadLoad.REditAdd;  
  begin  
      REdt.Lines.Append('正在保存');  
  end;  
  procedure   TThreadLoad.Execute;  
  var  
   
      IDHttp2:TIDHttp;  
      file_name:string;  
      Streamfile1:TMemoryStream;  
  begin  
   
      while   not   terminated   do  
          begin  
              EnterCriticalSection(CriticalSec);//进入临界段  
                  try  
                      GetFile(File_name);  
                      IDHttp2:=TIDHttp.Create(nil);  
                          try  
                              StreamFile1:=TMemoryStream.Create;  
                                  try  
                                      IDHttp2.Head(m_sURL);  
                                      IDHttp2.Get(m_sURL,StreamFile1);  
                                      StreamFile1.SaveToFile('d:\'+file_name);  
                                  finally  
                                      StreamFile1.Free;  
                                  end;  
                          finally  
                              idhttp2.Free;  
                          end;  
                    //   synchronize(REditAdd);  
                  finally  
                      LeaveCriticalSection(CriticalSec);  
                  end;  
              if   file_name=''   then   exit;  
          end;//begin  
   
  end;  
   
  procedure   TForm1.BtnDowloadClick(Sender:   TObject);  
  var  
    i,k:integer;  
    ThreadArray:array[0..4]of   TThreadLoad;  
  begin  
    for   i:=0   to   4   do  
      begin  
      ThreadArray[i]:=tthreadLoad.Create(true,EdtURL.Text+'/'+m_arrayimage[i]);  
      ThreadArray[i].REdt:=REdtMess;  
      end;  
      for   k:=0   to   4   do     ThreadArray[k].Resume;  
    end;  
   
  Constructor   TThreadLoad.Create(bWait:boolean;const   URL:string);  
  begin  
      inherited   create(bWait);  
      m_sURL:=URL;  
  end;  
   
  {Destructor     TThreadLoad.Destroy;  
  begin  
      inherited   Destroy;  
  end;   }  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      m_ArrayImage[0]:='aa.bmp';  
      m_arrayImage[4]:='4.jpg';  
      m_arrayimage[2]:='1.jpg';  
      m_arrayimage[3]:='2.jpg';  
      m_arrayimage[1]:='3.jpg';  
      g_i:=0;  
      InitializeCriticalSection(CriticalSec)  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      DeleteCriticalSection(CriticalSec);  
  end;  
   
  end.  
  {==============================================================}  
  delphi的单步跟踪的时候产生错误错误提示,有的时候会整个delphi都死  
  掉  
   
   
  {==============================================================}

继续阅读《多线程下载问题(IDHTTP)》的全文内容...

多线程下载问题(IDHTTP)相关推荐

  1. libcurl使用多线程下载大文件源码示例!

    使用libcurl多线程下载大文件的基本思想: 首选打开文件,将文件等分为指定的片段,使用http range下载,一个线程下载一个片段,当线程下载片段时,它们将数据写到打开文件的指定位置,类似BT文 ...

  2. [Mac] mac linux 多线程下载利器 axel

    ​> 之前做过一些文件下载的统计,发现谷歌浏览器chrome和火狐firefox, 一般都是单线程的下载文件,360浏览器却是多线程的下载. 如今切换到了mac上,发现没有360哪个浏览器,就像 ...

  3. 基于流式的md5计算-多线程下载工具Lwget介绍

    在数据传输的时候,我们希望实现以下目标: 1. 使用多线程传输,加速下载速度 2. 数据在传输过程中,进行流式md5计算,避免在传输完毕之后校验大文件 3. 支持断点续传 4. 支持http协议和ft ...

  4. 断点续传---多线程下载进阶(一)

    打算总结7篇笔记.来学习下断点续传---多线程下载进阶 AndroidManifest.xml <?xml version="1.0" encoding="utf- ...

  5. Android -- 多线程下载

    因为Android应用程序是java写的,基本上很多java写的程序都可以直接照搬到Android上面,移植性非常Good.这里讲一下多线程下载,就是每个线程都下载自己的那部分,那么就需要平均分配分割 ...

  6. Android 多线程下载 显示进度 速度

    功能要求:从网络下载一APK应用,显示下载速度.进度,并安装应用. 运行效果图: 工程结构图: 很简单,就一个activity,一个更新UI的线程,一个下载线程加个文件处理类 主要代码: /***多线 ...

  7. android 多线程下载,断点续传,线程池

    android 多线程下载,断点续传,线程池 你可以在这里看到这个demo的源码: https://github.com/onlynight/MultiThreadDownloader 效果图 这张效 ...

  8. python代码示例下载-Python实现多线程下载脚本的示例代码

    0x01 分析 一个简单的多线程下载资源的Python脚本,主要实现部分包含两个类: Download类:包含download()和get_complete_rate()两种方法.download() ...

  9. Android 模拟多线程下载

    以下是一个多线程下载的例子,见代码: 1.首先是布局文件 1 <?xml version="1.0" encoding="utf-8"?> 2 &l ...

最新文章

  1. Leetcode-笔记-22.括号生成--递归
  2. pytorch 学习: STGCN
  3. QT的QQmlScriptString类的使用
  4. WEB数据透视表Pivot Table
  5. 计算机二级web题目(3)--HTML基础
  6. 20个正则表达式,举一反三,相信对你很有用
  7. 简单阻容降压电路图_升压降压芯片电路
  8. 用计算机画 信息技术课标要求,[引用]小学信息技术课程标准
  9. SQL笔记(1)索引/触发器
  10. cookie、session和token
  11. [CMake] set_property 和 set_target_properties
  12. 苹果6换屏多钱_iPhone12Pro更换屏幕多少钱 苹果12官方换屏价格公布
  13. DataGrid中間隔色的實現
  14. at shutdown 不起作用_at胎是什么胎
  15. 抖音快手微视去水印小程序!全网短视频无水印免费下载工具!
  16. 刚入职就写了个bug,把几万用户搞蓝屏了···
  17. word文档图标变成白纸_win10word文档图标变白,win10office图标空白
  18. React 还是 Vue: 你应该选择哪一个Web前端框架?
  19. MacBook无故黑屏,按键没反应解决办法
  20. 安装GD库 GD库安装全过程详解

热门文章

  1. 怎样查看光驱硬盘托架的尺寸
  2. java基础----数据结构与算法----Java API:集合 以及 排序相关API
  3. RabbitMQ高可用方案总结
  4. SubLime Text 3 配置SublimeREPL来交互式调试程序
  5. NodeJS起步两三事
  6. pthreads v3在centos7下的安装与配置
  7. Eclipse高效率开发技巧
  8. @ResponseBody
  9. 编译openjdk源码
  10. 编程异常——假设你报createSQLQuery is not valid without active transaction,...