亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? thttpgetthread.~cpp

?? 多線程 http 下載 c++builder代碼
?? ~CPP
字號:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "THttpGetThread.h"
#pragma package(smart_init)
#pragma link "wininet.lib"
//---------------------------------------------------------------------------
int GetFileSize(const AnsiString &FileName)
{
    int FileSize=0;
    HANDLE hFile=CreateFile(FileName.c_str(),
                    GENERIC_READ,
                    FILE_SHARE_READ,
                    NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);
    if(hFile!=INVALID_HANDLE_VALUE)
    {
        FileSize=GetFileSize(hFile,NULL);
        CloseHandle(hFile);
    }
    return FileSize;
}
//---------------------------------------------------------------------------

__fastcall THttpGetThread::THttpGetThread(TObject *Owner): TThread(true)
{
    FreeOnTerminate = True;   // 自動刪除
    FRepeatCount=5;

    FIndex=0;
    FOwner=Owner;

    FFromBreakpoint=false;
    FSuccess=false;
    FConnected=false;
    iFileHandle=-1;
    FFileSize=-2;
    dwStart=0;
    dwTotal=0;
}
//---------------------------------------------------------------------------
void __fastcall THttpGetThread::Execute()
{
    for(int i=0;i<FRepeatCount;i++)
    {
        StartHttpGet();
        GetWebFileSize();
        SetFilePointer();
        DoHttpGet();
        EndHttpGet();
        if(FSuccess)break;
    }
    // 調用完成事件
    if(FSuccess)
        DoOnComplete();

    //else  DoOnError();
}
//---------------------------------------------------------------------------
// 從URL中提取主機名稱和下載文件路徑
void THttpGetThread::ParseURL(void)
{
    AnsiString URL=FURL;
    int i=URL.Pos("http://");
    if(i>0)
    {
        URL.Delete(1, 7);
    }
    i=URL.Pos("/");
    FHostName = URL.SubString(1, i-1);
    FDownPath = URL.SubString(i, URL.Length());
}
//---------------------------------------------------------------------------
// 打開Internet句柄,初使化下載環境
void THttpGetThread::StartHttpGet(void)
{
    if(FConnected)return;
    ParseURL();
    try
    {
        // 1.建立會話
        FhSession = InternetOpen("http-get-demo",
                    INTERNET_OPEN_TYPE_PRECONFIG,
                    NULL,NULL,
                    0);         // 同步方式
        if( FhSession==NULL)throw(Exception("Error:InterOpen"));
        DoOnStatusText("ok:InterOpen");
        // 2.建立連接
        FhConnect=InternetConnect(FhSession,
                    FHostName.c_str(),
                    INTERNET_DEFAULT_HTTP_PORT,
                    NULL,NULL,
                    INTERNET_SERVICE_HTTP, 0, 0);
        if(FhConnect==NULL)throw(Exception("Error:InternetConnect"));
        DoOnStatusText("ok:InternetConnect");
        // 3.初使化下載請求
        const char *FAcceptTypes = "*/*";
        FhRequest = HttpOpenRequest(FhConnect,
                    "GET",
                    FDownPath.c_str(),
                    "HTTP/1.0",
                    NULL,
                    &FAcceptTypes,
                    INTERNET_FLAG_RELOAD,
                    0);
        if( FhRequest==NULL)throw(Exception("Error:HttpOpenRequest"));
        DoOnStatusText("ok:HttpOpenRequest");
        // 4.發送下載請求
        HttpSendRequest(FhRequest, NULL, 0, NULL, 0);
        DoOnStatusText("ok:HttpSendRequest");
        FConnected=true;
    }catch(Exception &exception)
    {
        EndHttpGet();
        DoOnStatusText(exception.Message);
    }
}
//---------------------------------------------------------------------------
int __fastcall THttpGetThread::GetWebFileSize(void)
{
    if(FFileSize>-2)return FFileSize;
    FFileSize=-1;
    if(FConnected==false)StartHttpGet();
    if(FConnected==false)return FFileSize;
    try
    {
        // 取得文件的大小
        DWORD BufLen=HTTPGET_BUFFER_MAX;
        DWORD dwIndex=0;
        bool RetQueryInfo=HttpQueryInfo(FhRequest,
                    HTTP_QUERY_CONTENT_LENGTH,
                    Buffer, &BufLen,
                    &dwIndex);
        if( RetQueryInfo==false) throw(Exception("Error:HttpQueryInfo"));
        DoOnStatusText("ok:HttpQueryInfo");
        FFileSize=StrToInt(Buffer); // 文件大小
        DoOnGetFileSize(FFileSize);
    }catch(Exception &exception)
    {
        DoOnStatusText(exception.Message);
    }
    return FFileSize;
}
//---------------------------------------------------------------------------
bool __fastcall THttpGetThread::SetFilePointer(void)
{
    int Size=GetWebFileSize();
    if(Size<0)return false;
    if(dwStart==0)return true;
    try
    {
        // 調整文件指針
        bool ReadReturn=InternetSetFilePointer(FhRequest,
                    dwStart,NULL,FILE_BEGIN,0);
        if( ReadReturn==false) throw(Exception("Error:InternetSetFilePointer"));
        DoOnStatusText("ok:InternetSetFilePointer");
        return true;
    }catch(Exception &exception)
    {
        DoOnStatusText(exception.Message);
    }
    return false;
}
//---------------------------------------------------------------------------
// 打開輸出文件,以保存下載的數據
DWORD THttpGetThread::OpenOutFile(void)
{
    try
    {
        // 打開輸出文件,準備保存下載的數據
        if(FileExists(FOutFileName))
        {
            if(FFromBreakpoint) // 使用斷點續傳
            {
                DWORD dwCount=GetFileSize(FOutFileName);
                if(dwCount>0)
                {
                    iFileHandle=FileOpen(FOutFileName,fmOpenWrite);
                    FileSeek(iFileHandle,0,2);   // 移動文件指針到末尾
                    if(iFileHandle==-1) throw(Exception("Error:FileCreate"));
                    DoOnStatusText("ok:OpenFile");
                    return dwCount;
                }
            }
            DeleteFile(FOutFileName);
        }
        iFileHandle=FileCreate(FOutFileName);
        if(iFileHandle==-1) throw(Exception("Error:FileCreate"));
        DoOnStatusText("ok:CreateFile");
    }catch(Exception &exception)
    {
        DoOnStatusText(exception.Message);
    }
    return 0;
}
//---------------------------------------------------------------------------
// 執行下載過程
void THttpGetThread::DoHttpGet(void)
{
    if(FConnected==false)return;
    DWORD dwCount=OpenOutFile();
    if(dwCount>0)   // 調整文件指針
    {
        dwStart = dwStart + dwCount;
        if(!SetFilePointer())   // 服務器不支持操作
        {
            // 清除輸出文件
            FileSeek(iFileHandle,0,0);   // 移動文件指針到頭部
        }
    }
    try
    {
        // 發出下載事件
        DoOnStatusText("StartGet:InternetReadFile");
        // 讀取數據
        DWORD dwRequest;    // 請求下載的字節數
        DWORD dwRead;       // 實際讀出的字節數
        dwRequest=HTTPGET_BUFFER_MAX;
        while(true)
        {
            Application->ProcessMessages();
            // 修正需要下載的字節數,使得dwRequest + dwCount<dwTotal
            if(dwTotal>0)     // dwTotal<=0表示下載到文件結束
            {
                if(dwRequest+dwCount>dwTotal)
                    dwRequest=dwTotal-dwCount;
            }
            bool ReadReturn = InternetReadFile(FhRequest,
                    (LPVOID)Buffer,
                    dwRequest,
                    &dwRead);
            if(!ReadReturn)break;
            if(dwRead==0)break;
            // 保存數據
            Buffer[dwRead]='\0';
            FileWrite(iFileHandle, Buffer, dwRead);
            dwCount = dwCount + dwRead;
            // 發出下載進程事件
            DoOnProgress(dwCount);
            if(dwTotal>0)     // Count<=0表示下載到文件結束
            {
                if(dwCount>=dwTotal)break;
            }
        }
    }catch(Exception &exception)
    {
        DoOnStatusText(exception.Message);
    }
    FileClose(iFileHandle);

    DoOnStatusText("End:InternetReadFile");
    if(dwCount==dwTotal)FSuccess=true;
}
//---------------------------------------------------------------------------
// 關閉Internet句柄
void THttpGetThread::EndHttpGet(void)
{
    if(FConnected)
    {
        DoOnStatusText("Closing:InternetConnect");
        try
        {
            InternetCloseHandle(FhRequest);
            InternetCloseHandle(FhConnect);
            InternetCloseHandle(FhSession);
        }catch(...){}
        FhSession=NULL;
        FhConnect=NULL;
        FhRequest=NULL;
        FConnected=false;
        DoOnStatusText("Closed:InternetConnect");
    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void THttpGetThread::DoOnGetFileSize(int Size)
{
    if(FOnGetFileSize)
        FOnGetFileSize(FOwner,Size);
}
//---------------------------------------------------------------------------
void THttpGetThread::DoOnProgress(int Position)
{
    if(FOnProgress)
        FOnProgress(FOwner,Position,dwTotal,FIndex);
}
//---------------------------------------------------------------------------
void THttpGetThread::DoOnStatusText(AnsiString Text)
{
    if(FOnStatusText)
        FOnStatusText(FOwner,Text,FIndex);
}
//---------------------------------------------------------------------------
void THttpGetThread::DoOnComplete(void)
{
    if(FOnComplete)
        FOnComplete(FOwner,FIndex);
}
//---------------------------------------------------------------------------
void THttpGetThread::DoOnError(int errorcode)
{
    if(FOnError)
        FOnError(FOwner,errorcode);
}
//---------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品视频一区| 97久久超碰国产精品| 国产精品福利一区二区| 欧美午夜精品久久久久久孕妇| 性感美女久久精品| 欧美日韩在线三级| 播五月开心婷婷综合| 青草av.久久免费一区| 亚洲色大成网站www久久九九| 久久青草国产手机看片福利盒子| 欧美中文字幕一区二区三区亚洲| 国产sm精品调教视频网站| 日韩精品欧美精品| 一区二区激情视频| 国产精品麻豆久久久| 久久久久久久久蜜桃| 制服丝袜国产精品| 欧美伊人久久大香线蕉综合69| 国产成人免费av在线| 毛片一区二区三区| 亚洲va天堂va国产va久| 亚洲欧美综合另类在线卡通| 精品福利在线导航| 欧美疯狂性受xxxxx喷水图片| 在线视频观看一区| 一本到不卡精品视频在线观看| 国产999精品久久| 精东粉嫩av免费一区二区三区| 性做久久久久久免费观看欧美| 一个色在线综合| 亚洲色图都市小说| 中文字幕一区二区三区精华液 | 老鸭窝一区二区久久精品| 亚洲乱码精品一二三四区日韩在线| 中文字幕在线一区| 久久久三级国产网站| 日韩一区国产二区欧美三区| 欧美精品tushy高清| 欧美色网站导航| 欧美日韩高清一区二区三区| 欧美性色欧美a在线播放| 色婷婷av一区二区三区大白胸| 91同城在线观看| 91免费版pro下载短视频| aa级大片欧美| av在线播放成人| 日本韩国视频一区二区| 91福利小视频| 欧美日韩成人在线| 欧美一区二区在线免费观看| 7777精品伊人久久久大香线蕉完整版 | 色婷婷国产精品| 色8久久精品久久久久久蜜 | 91精品国产综合久久福利软件| 4438x亚洲最大成人网| 91精品国产综合久久福利| 欧美一级久久久久久久大片| 日韩欧美中文字幕一区| 久久嫩草精品久久久精品| 国产三级精品视频| 亚洲视频一区二区在线观看| 亚洲国产aⅴ天堂久久| 日韩精品视频网| 国产高清久久久久| 99re热这里只有精品视频| 欧美在线观看视频一区二区 | 亚洲图片欧美一区| 日本成人在线电影网| 久草这里只有精品视频| 成人av电影在线观看| 欧美在线不卡一区| 日韩欧美高清一区| 久久久不卡网国产精品一区| 亚洲色图另类专区| 免费在线看成人av| 岛国精品在线观看| 欧美日韩国产精品成人| 久久久亚洲国产美女国产盗摄 | 亚洲男女毛片无遮挡| 日韩精品亚洲专区| 成人午夜视频免费看| 欧美三区在线观看| 国产亚洲女人久久久久毛片| 亚洲欧美另类久久久精品2019| 天天色综合成人网| 国产成a人亚洲精| 欧美综合久久久| 久久久99精品免费观看不卡| 亚洲一区二区在线播放相泽| 紧缚奴在线一区二区三区| 91同城在线观看| 精品久久久久99| 夜夜嗨av一区二区三区网页| 国内成人免费视频| 欧美性色黄大片手机版| 亚洲国产精品高清| 美腿丝袜在线亚洲一区| 91在线码无精品| 欧美mv日韩mv| 一区二区在线观看av| 国模少妇一区二区三区| 欧美色大人视频| 中文字幕一区二区三区蜜月| 黑人精品欧美一区二区蜜桃 | 欧美伦理视频网站| 国产精品久久久久久久久快鸭| 久久99精品久久久久婷婷| 欧美性色综合网| 亚洲裸体在线观看| 丁香六月综合激情| 欧美xxxxx裸体时装秀| 亚洲国产成人va在线观看天堂| 国产.欧美.日韩| 久久先锋影音av鲁色资源| 午夜不卡av在线| 色国产综合视频| 亚洲人xxxx| 91视频在线观看免费| 国产欧美精品一区二区三区四区| 美腿丝袜一区二区三区| 777a∨成人精品桃花网| 亚洲成av人片一区二区| 欧美色窝79yyyycom| 一区二区三区在线不卡| 91亚洲国产成人精品一区二区三 | 国产一区二区三区在线看麻豆| 欧美日韩二区三区| 亚洲自拍都市欧美小说| 日本二三区不卡| 亚洲欧美偷拍三级| 91伊人久久大香线蕉| 亚洲女性喷水在线观看一区| 99国产精品久久久久久久久久| 中文字幕第一区二区| 豆国产96在线|亚洲| 日本一区二区在线不卡| 国产 日韩 欧美大片| 中文一区二区完整视频在线观看| 国产91丝袜在线观看| 欧美极品xxx| av中文字幕不卡| 亚洲精品国产无套在线观| 91猫先生在线| 一级做a爱片久久| 欧美日韩五月天| 日本美女一区二区| 欧美一区二区福利在线| 免费成人美女在线观看.| 欧美成人一区二区三区片免费| 久久国产精品一区二区| 精品美女一区二区| 国产精品主播直播| 亚洲国产高清在线观看视频| 成人avav在线| 一区二区理论电影在线观看| 91麻豆精品国产91久久久久久 | 日韩成人精品在线| 精品国产免费视频| 成人v精品蜜桃久久一区| 亚洲美腿欧美偷拍| 欧美精品久久天天躁| 国产在线日韩欧美| 亚洲欧美在线高清| 欧美日韩精品一区视频| 美女被吸乳得到大胸91| 国产三级三级三级精品8ⅰ区| 成人黄页毛片网站| 亚洲成av人片在线观看| 精品国产凹凸成av人网站| 成人性生交大片免费看中文| 一区二区高清在线| 精品福利一区二区三区免费视频| av中文一区二区三区| 天堂av在线一区| 欧美极品aⅴ影院| 欧美性视频一区二区三区| 免费成人小视频| 亚洲色欲色欲www在线观看| 3atv在线一区二区三区| 国产成人精品影院| 五月婷婷欧美视频| 国产日韩欧美精品综合| 欧美日韩一区二区在线观看| 国产精品亚洲一区二区三区在线| 一区二区三区国产精品| 亚洲精品一区二区三区影院| 色哟哟在线观看一区二区三区| 美腿丝袜亚洲一区| 亚洲乱码日产精品bd| 久久综合网色—综合色88| 欧美性大战xxxxx久久久| 国精产品一区一区三区mba桃花| 一区二区三区在线视频观看58| 欧美精品一区二区三区久久久| 在线观看国产精品网站| 国产乱码精品一区二区三| 日韩在线一二三区| 亚洲色图19p| 欧美国产精品专区| 91精品国产高清一区二区三区|