⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thttpgetthread.~h

📁 多线程 http 下载 c++builder代码
💻 ~H
字号:
//---------------------------------------------------------------------------

#ifndef THttpGetThreadH
#define THttpGetThreadH
//---------------------------------------------------------------------------
#include <Wininet.h>
#include <Classes.hpp>
//---------------------------------------------------------------------------
typedef void __fastcall(__closure *TOnHttpNotify)(TObject *Sender,int Index);
typedef void __fastcall(__closure *TOnHttpCompelete)(TObject *Sender,int Index);
typedef void __fastcall(__closure *TOnHttpGetFileSize)(TObject *Sender,int FileSize);
typedef void __fastcall(__closure *TOnProgressEvent)(TObject *Sender,int Position,int Max,int Index);
typedef void __fastcall(__closure *TOnHttpStatusText)(TObject *Sender,AnsiString Msg,int Index);
typedef void __fastcall(__closure *TOnError)(TObject *Sender,int errorcode);
//TNotifyEvent
//---------------------------------------------------------------------------
#define HTTPGET_BUFFER_MAX   1024
class THttpGetThread : public TThread
{
private:
    int FIndex;         // 在线程数组中的索引
    int FRepeatCount;   // 错误时重复次数
    char Buffer[HTTPGET_BUFFER_MAX+4];

    TObject *FOwner;
    AnsiString FURL;
    AnsiString FOutFileName;
    AnsiString FHostName;   // 主机名
    AnsiString FDownPath;   // 下载文件的路径和文件名

	HINTERNET FhSession;
    HINTERNET FhConnect;
    HINTERNET FhRequest;
    int iFileHandle;

    int FFileSize;
    DWORD dwStart;      // 下载开始的位置
    DWORD dwTotal;      // 需要下载的字节数
    // 属性变量
    DWORD FGetBytes;    // 下载的总字节数
    bool  FSuccess;     // 下载是否成功
    bool  FConnected;   // 是否连接
    bool  FFromBreakpoint;   // 从断点开始下载
    // 事件变量
    TOnHttpNotify       FOnAbort;
    TOnError            FOnError;
    TOnHttpCompelete    FOnComplete;
    TOnHttpGetFileSize  FOnGetFileSize;
    TOnProgressEvent    FOnProgress;
    TOnHttpStatusText   FOnStatusText;

    // 内部方法
    void ParseURL(void);
    void StartHttpGet(void);
    void DoHttpGet(void);
    void EndHttpGet(void);      // 结束下载

    void DoOnComplete(void);
    void DoOnError(int errorcode);
    void DoOnProgress(int Position);
    void DoOnGetFileSize(int Size);
    void DoOnStatusText(AnsiString Text);
    DWORD OpenOutFile(void);
protected:
    void __fastcall Execute();
public:
    __fastcall THttpGetThread(TObject *Owner);

    void __fastcall Stop(void)  { EndHttpGet(); }
    int __fastcall GetWebFileSize(void);
    bool __fastcall SetFilePointer(void);
__published:
    __property AnsiString URL = { read=FURL, write=FURL };
    __property AnsiString OutFileName = { read=FOutFileName, write=FOutFileName};
    __property bool Successed = { read=FSuccess};
    __property bool Connected = { read=FConnected};
    __property bool FromBreakpoint  = { read=FFromBreakpoint, write=FFromBreakpoint};
    __property int Index  = { read=FIndex, write=FIndex};
    __property DWORD StartPostion  = { read=dwStart, write=dwStart};
    __property DWORD GetBytes = { read=dwTotal, write=dwTotal};
    __property TOnHttpCompelete OnComplete = { read=FOnComplete, write=FOnComplete };
    __property TOnHttpNotify OnAbort  = { read=FOnAbort, write=FOnAbort };
    __property TOnError      OnError  = { read=FOnError, write=FOnError };
    __property TOnHttpGetFileSize OnGetFileSize = { read=FOnGetFileSize, write=FOnGetFileSize };
    __property TOnProgressEvent OnProgress  = { read=FOnProgress, write=FOnProgress };
    __property TOnHttpStatusText OnStatusText  = { read=FOnStatusText, write=FOnStatusText };
};
//---------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -