溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用易語(yǔ)言編寫(xiě)一個(gè)多線程多任務(wù)下載器

發(fā)布時(shí)間:2021-03-08 14:30:09 來(lái)源:億速云 閱讀:556 作者:Leah 欄目:編程語(yǔ)言

本篇文章為大家展示了使用易語(yǔ)言編寫(xiě)一個(gè)多線程多任務(wù)下載器,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

1.DLL命令表

.版本 2
.DLL命令 InternetGetConnectedStateHTTP, , "Wininet.dll", "InternetGetConnectedState", 公開(kāi)
  .參數(shù) lpdwFlags, 整數(shù)型, 傳址
  .參數(shù) dwReserved, 整數(shù)型
.DLL命令 InternetOpenAHTTP, 整數(shù)型, "Wininet.dll", "InternetOpenA", 公開(kāi)
  .參數(shù) lpszAgent, 文本型
  .參數(shù) dwAccessType, 整數(shù)型
  .參數(shù) lpszProxyName, 整數(shù)型
  .參數(shù) lpszProxyBypass, 整數(shù)型
  .參數(shù) dwFlags, 整數(shù)型
.DLL命令 InternetOpenUrlAHTTP, 整數(shù)型, "Wininet.dll", "InternetOpenUrlA", 公開(kāi)
  .參數(shù) hInternet, 整數(shù)型
  .參數(shù) lpszUrl, 文本型
  .參數(shù) lpszHeaders, 文本型
  .參數(shù) dwHeadersLength, 整數(shù)型
  .參數(shù) dwFlags, 整數(shù)型
  .參數(shù) dwContext, 整數(shù)型
.DLL命令 InternetCloseHandleHTTP, , "Wininet.dll", "InternetCloseHandle", 公開(kāi)
  .參數(shù) handle, 整數(shù)型
.DLL命令 HttpQueryInfoAHTTP, 整數(shù)型, "Wininet.dll", "HttpQueryInfoA", 公開(kāi)
  .參數(shù) hRequest, 整數(shù)型
  .參數(shù) dwInfoLevel, 整數(shù)型
  .參數(shù) lpvBuffer, 整數(shù)型, 傳址
  .參數(shù) lpdwBufferLength, 整數(shù)型, 傳址
  .參數(shù) lpdwIndex, 整數(shù)型, 傳址
.DLL命令 創(chuàng)建文件, 整數(shù)型, "kernel32.dll", "CreateFileA", 公開(kāi)
  .參數(shù) 文件名, 文本型
  .參數(shù) 打開(kāi)方式, 整數(shù)型, , -2147483648表示讀,1073741824表示寫(xiě),0可取屬性
  .參數(shù) 共享方式, 整數(shù)型, , 1共享讀,2共享寫(xiě),0不共享
  .參數(shù) 安全性, 整數(shù)型, , 為空即可
  .參數(shù) 打開(kāi)方式2, 整數(shù)型, , 1創(chuàng)建文件(文件存在出錯(cuò)),2創(chuàng)建文件(改寫(xiě)),3文件必須存在,4如果文件不存在則創(chuàng)建,5將現(xiàn)有文件縮短為0
  .參數(shù) 文件屬性, 整數(shù)型, , 128默認(rèn)屬性,268435456隨機(jī)訪問(wèn)優(yōu)化,134217728連續(xù)訪問(wèn)優(yōu)化,67108864臨時(shí)文件
  .參數(shù) 文件句柄, 整數(shù)型, , 一般為0
.DLL命令 創(chuàng)建映射, 整數(shù)型, "kernel32.dll", "CreateFileMappingA", 公開(kāi)
  .參數(shù) 文件句柄, 整數(shù)型
  .參數(shù) 安全對(duì)象, 整數(shù)型, , 0表示默認(rèn)屬性
  .參數(shù) 映射方式, 整數(shù)型, , 2表示只讀,4表示可讀寫(xiě)
  .參數(shù) 高32位, 整數(shù)型, , 文件映射的最大長(zhǎng)度(高32位)
  .參數(shù) 低32位, 整數(shù)型, , 文件映射的最小長(zhǎng)度(低32位)
  .參數(shù) 對(duì)象名字, 整數(shù)型, , 可以更改為文件型
.DLL命令 映射裝載, 整數(shù)型, "kernel32.dll", "MapViewOfFile", 公開(kāi)
  .參數(shù) 映射句柄, 整數(shù)型
  .參數(shù) 映射方式, 整數(shù)型, , 2可讀可寫(xiě),4只讀,
  .參數(shù) 高32位, 整數(shù)型, , 文件中映射起點(diǎn)的高32位地址,64k的整數(shù)倍
  .參數(shù) 低32位, 整數(shù)型, , 文件中映射起點(diǎn)的低32位地址,64k的整數(shù)倍
  .參數(shù) 字節(jié)數(shù), 整數(shù)型, , 文件中要映射的字節(jié)數(shù),根據(jù)實(shí)際長(zhǎng)度指定
.DLL命令 映射卸載, 整數(shù)型, "kernel32.dll", "UnmapViewOfFile", 公開(kāi)
  .參數(shù) 映射地址, 整數(shù)型, , 用映射裝載函數(shù)獲得的
.DLL命令 CloseHandleHTTP, 整數(shù)型, "kernel32.dll", "CloseHandle", 公開(kāi)
  .參數(shù) hObject, 整數(shù)型
.DLL命令 HeapCreate, 整數(shù)型, "kernel32.dll", "HeapCreate", 公開(kāi)
  .參數(shù) flOptions, 整數(shù)型
  .參數(shù) dwInitialSize, 整數(shù)型
  .參數(shù) dwMaximumSize, 整數(shù)型
.DLL命令 HeapAllocHTTP, 整數(shù)型, "kernel32.dll", "HeapAlloc", 公開(kāi)
  .參數(shù) hHeap, 整數(shù)型
  .參數(shù) dwFlags, 整數(shù)型
  .參數(shù) dwBytes, 整數(shù)型
.DLL命令 HeapDestroy, 邏輯型, "kernel32.dll", "HeapDestroy", 公開(kāi)
  .參數(shù) hHeap, 整數(shù)型
.DLL命令 RtlMoveMemory_讀整數(shù), , "kernel32.dll", "RtlMoveMemory", 公開(kāi)
  .參數(shù) Destination, 整數(shù)型, 傳址
  .參數(shù) Source, 整數(shù)型
  .參數(shù) Length, 整數(shù)型
.DLL命令 RtlMoveMemory_寫(xiě)整數(shù), , "kernel32.dll", "RtlMoveMemory", 公開(kāi)
  .參數(shù) Destination, 整數(shù)型
  .參數(shù) Source, 整數(shù)型, 傳址
  .參數(shù) Length, 整數(shù)型
.DLL命令 RtlMoveMemory_寫(xiě)文本, , "kernel32.dll", "RtlMoveMemory", 公開(kāi)
  .參數(shù) Destination, 整數(shù)型
  .參數(shù) Source, 文本型, 傳址
  .參數(shù) Length, 整數(shù)型
.DLL命令 InitializeCriticalSectionHTTP, , "kernel32.dll", "InitializeCriticalSection", 公開(kāi)
  .參數(shù) lpCriticalSection, 整數(shù)型
.DLL命令 CreateThreadHTTP, 整數(shù)型, "kernel32.dll", "CreateThread", 公開(kāi)
  .參數(shù) lpThreadAttributes, 整數(shù)型
  .參數(shù) dwStackSize, 整數(shù)型
  .參數(shù) lpStartAddress, 子程序指針
  .參數(shù) lpParameter, 整數(shù)型
  .參數(shù) dwCreationFlags, 整數(shù)型
  .參數(shù) lpThreadId, 整數(shù)型, 傳址
.DLL命令 DeleteCriticalSectionHTTP, , "kernel32.dll", "DeleteCriticalSection", 公開(kāi)
  .參數(shù) lpCriticalSection, 整數(shù)型
.DLL命令 EnterCriticalSectionHTTP, , "kernel32.dll", "EnterCriticalSection", 公開(kāi)
  .參數(shù) lpCriticalSection, 整數(shù)型
.DLL命令 LeaveCriticalSectionHTTP, , "kernel32.dll", "LeaveCriticalSection", 公開(kāi)
  .參數(shù) lpCriticalSection, 整數(shù)型
.DLL命令 WaitForSingleObjectHTTP, 整數(shù)型, "kernel32.dll", "WaitForSingleObject", 公開(kāi)
  .參數(shù) hHandle, 整數(shù)型
  .參數(shù) dwMilliseconds, 整數(shù)型
.DLL命令 InternetReadFileHTTP, 整數(shù)型, "Wininet.dll", "InternetReadFile", 公開(kāi)
  .參數(shù) hFile, 整數(shù)型
  .參數(shù) lpBuffer, 整數(shù)型
  .參數(shù) dwNumberOfBytesToRead, 整數(shù)型
  .參數(shù) lpdwNumberOfBytesRead, 整數(shù)型, 傳址
.DLL命令 寫(xiě)入映射, , "kernel32.dll", "RtlMoveMemory", 公開(kāi)
  .參數(shù) 起始位置, 整數(shù)型, , 用映射裝載命令得到的
  .參數(shù) 待寫(xiě)入數(shù)據(jù), 整數(shù)型, , 要寫(xiě)入的數(shù)據(jù),可以更改為其他類型
  .參數(shù) 數(shù)據(jù)長(zhǎng)度, 整數(shù)型, , 要寫(xiě)入的數(shù)據(jù)長(zhǎng)度,不大于實(shí)際數(shù)據(jù)長(zhǎng)度
.DLL命令 HeapFree, 邏輯型, "kernel32.dll", "HeapFree", 公開(kāi)
  .參數(shù) hHeap, 整數(shù)型
  .參數(shù) dwFlags, 整數(shù)型
  .參數(shù) lpMem, 整數(shù)型
.DLL命令 PathFindExtensionAjtw, 文本型, "shlwapi.dll", "PathFindExtensionA", 公開(kāi)
  .參數(shù) 文件路徑, 文本型
.DLL命令 InternetGetConnectedState, 邏輯型, "Wininet.dll", "InternetGetConnectedState", 公開(kāi), 本來(lái)是無(wú)返回值
  .參數(shù) lpdwFlags, 整數(shù)型, 傳址
  .參數(shù) dwReserved, 整數(shù)型
.DLL命令 HttpQueryInfohx, 整數(shù)型, "wininet.dll", "HttpQueryInfoA", 公開(kāi)
  .參數(shù) Internet請(qǐng)求句柄, 整數(shù)型
  .參數(shù) 待查信息, 整數(shù)型
  .參數(shù) 返回容器, 文本型, 傳址
  .參數(shù) 返回容器長(zhǎng)度, 整數(shù)型, 傳址
  .參數(shù) lpdwIndex, 整數(shù)型, 傳址

2.全局變量表

.版本 2
.全局變量 配備文本變量, 文本型, , "0"
.全局變量 多任務(wù)句柄, 整數(shù)型, , "0"

3.多線程

.版本 2
.程序集 程序集2
.子程序 文件_取網(wǎng)絡(luò)文件名1, 文本型, 公開(kāi)
.參數(shù) 地址, 文本型
.局部變量 Onlined, 邏輯型
.局部變量 dwFlags, 整數(shù)型
.局部變量 strAgent, 文本型
.局部變量 hConnect, 整數(shù)型
.局部變量 hOpen, 整數(shù)型
.局部變量 szTemp, 文本型
.局部變量 dwSizeOfRq, 整數(shù)型
Onlined = InternetGetConnectedState (dwFlags, 0)
.如果真 (Onlined = 假)
  返回 (取文件名11 (地址))
.如果真結(jié)束
strAgent = “我的下載” + 到文本 (取啟動(dòng)時(shí)間 ())
.如果 (位與 (dwFlags, 4) = 0)
  hOpen = InternetOpenAHTTP (strAgent, 4, 0, 0, 0)
.否則
  hOpen = InternetOpenAHTTP (strAgent, 0, 0, 0, 0)
.如果結(jié)束
.如果真 (hOpen = 0)
  返回 (取文件名11 (地址))
.如果真結(jié)束
hConnect = InternetOpenUrlAHTTP (hOpen, 地址, “”, 0, 2097152 + 2147483648 + 67108864 + 256, 0)
.如果真 (hConnect = 0)
  InternetCloseHandleHTTP (hOpen)
  返回 (取文件名11 (地址))
.如果真結(jié)束
szTemp = 取空白文本 (255)
dwSizeOfRq = 255
.如果真 (HttpQueryInfohx (hConnect, 51, szTemp, dwSizeOfRq, 0) = 0)
  InternetCloseHandleHTTP (hOpen)
  返回 (取文件名11 (地址))
.如果真結(jié)束
InternetCloseHandleHTTP (hOpen)
返回 (取文件名11 (szTemp))
.子程序 取文件名11, 文本型
.參數(shù) 地址, 文本型
.局部變量 i, 整數(shù)型
.局部變量 szTemp, 文本型
szTemp = 子文本替換 (地址, “\”, “/”, , , 真)
i = 倒找文本 (szTemp, “/”, , 假)
.如果真 (i ≠ -1)
  szTemp = 取文本右邊 (szTemp, 取文本長(zhǎng)度 (szTemp) - i)
.如果真結(jié)束
i = 尋找文本 (szTemp, “?”, , 假)
.如果真 (i = -1)
  返回 (szTemp)
.如果真結(jié)束
返回 (取文本左邊 (szTemp, i - 1))
.子程序 文件_取擴(kuò)展名, 文本型, 公開(kāi), 返回一個(gè)文件的后綴名,如:.jpg 如果沒(méi)有后綴,返回空
.參數(shù) 文件名, 文本型, , 需要處理的原始文件名
返回 (PathFindExtensionAjtw (文件名))
.子程序 多線程_HTTP下載_開(kāi)始_多任務(wù), 整數(shù)型
.參數(shù) 參數(shù)_下載地址, 文本型
.參數(shù) 參數(shù)_保存路徑, 文本型, , 可以只填寫(xiě)下載路徑,程序?qū)?huì)以下載地址的文件名來(lái)保存,如果自己添加路徑加文件名,則程序會(huì)將以自己添加的文件名來(lái)命名,注意:路徑中不能有 . ,除非是添加路徑加文件名
.參數(shù) 參數(shù)_線程數(shù), 整數(shù)型
.參數(shù) 參數(shù)_回調(diào)函數(shù)地址, 整數(shù)型
.局部變量 變量_dwFlags, 整數(shù)型
.局部變量 變量_hOpen, 整數(shù)型
.局部變量 變量_szHead, 文本型
.局部變量 變量_hConnect, 整數(shù)型
.局部變量 變量_dwByteToRead, 整數(shù)型
.局部變量 變量_dwSizeOfRq, 整數(shù)型
.局部變量 變量_文件句柄, 整數(shù)型
.局部變量 變量_映射句柄, 整數(shù)型
.局部變量 變量_塊, 整數(shù)型
.局部變量 變量_次數(shù), 整數(shù)型
.局部變量 變量_hHeap, 整數(shù)型
.局部變量 變量_msg, 整數(shù)型
.局部變量 變量_地址, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
.局部變量 變量_當(dāng)前線程數(shù), 整數(shù)型
.局部變量 變量_進(jìn)程句柄, 整數(shù)型
.局部變量 c, 文本型, , "0"
.局部變量 a, 文本型
.局部變量 cc, 文本型
a = 文件_取擴(kuò)展名 (參數(shù)_保存路徑)
.如果真 (a = “”)
  .如果 (取文本右邊 (參數(shù)_保存路徑, 1) = “\”)
    cc = 文件_取網(wǎng)絡(luò)文件名1 (參數(shù)_下載地址)
    參數(shù)_保存路徑 = 參數(shù)_保存路徑 + cc
  .否則
    cc = 文件_取網(wǎng)絡(luò)文件名1 (參數(shù)_下載地址)
    參數(shù)_保存路徑 = 參數(shù)_保存路徑 + “\” + cc
  .如果結(jié)束
.如果真結(jié)束
.如果 (倒找文本 (參數(shù)_保存路徑, “.”, , 假) = -1) ' 那么就是 路徑 ,沒(méi)有文件名
  c = 分割文本 (參數(shù)_保存路徑, “\”, )
  .如果真 (取文本右邊 (參數(shù)_保存路徑, 1) ≠ “\”)
    參數(shù)_保存路徑 = 參數(shù)_保存路徑 + “\”
  .如果真結(jié)束
  參數(shù)_保存路徑 = 參數(shù)_保存路徑 + c [取數(shù)組成員數(shù) (c)]
.否則
.如果結(jié)束
' 取文件大小
InternetGetConnectedStateHTTP (變量_dwFlags, 0)
.如果 (位與 (變量_dwFlags, 4) = 0)
  變量_hOpen = InternetOpenAHTTP (字符 (0), 4, 0, 0, 0)
.否則
  變量_hOpen = InternetOpenAHTTP (字符 (0), 0, 0, 0, 0)
.如果結(jié)束
.如果真 (變量_hOpen = 0)
  ' Internet連接錯(cuò)誤
  返回 (-1)
.如果真結(jié)束
變量_szHead = “Accept: */*” + #換行符 + “Accept-Language: zh-cn” + #換行符 + “Accept-Encoding: gzip, deflate” + #換行符 + “User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)”
變量_hConnect = InternetOpenUrlAHTTP (變量_hOpen, 參數(shù)_下載地址, 變量_szHead, 取文本長(zhǎng)度 (變量_szHead), 2214592768, 0)
.如果真 (變量_hConnect = 0)
  ' 不能打開(kāi)該URL!
  InternetCloseHandleHTTP (變量_hOpen)
  返回 (-1)
.如果真結(jié)束
變量_dwByteToRead = 0
變量_dwSizeOfRq = 4
.如果真 (HttpQueryInfoAHTTP (變量_hConnect, 536870917, 變量_dwByteToRead, 變量_dwSizeOfRq, 0) = 0)
  變量_dwByteToRead = 0
.如果真結(jié)束
InternetCloseHandleHTTP (變量_hConnect)
InternetCloseHandleHTTP (變量_hOpen)
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 創(chuàng)建文件
變量_文件句柄 = 創(chuàng)建文件 (參數(shù)_保存路徑, 位或 (-2147483648, 1073741824), 位或 (1, 2), 0, 2, 0, 0)
.如果真 (變量_文件句柄 = -1)
  返回 (-1)
.如果真結(jié)束
變量_映射句柄 = 創(chuàng)建映射 (變量_文件句柄, 0, 4, 0, 變量_dwByteToRead, 0)
.如果真 (變量_映射句柄 = 0)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
.如果真 (變量_dwByteToRead = 0)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (0)
.如果真結(jié)束
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 計(jì)算分段
變量_塊 = 1024 × 1024
變量_次數(shù) = 變量_dwByteToRead ÷ 變量_塊
.如果真 (變量_dwByteToRead % 變量_塊 ≠ 0)
  變量_次數(shù) = 變量_次數(shù) + 1
.如果真結(jié)束
.如果真 (參數(shù)_線程數(shù) > 變量_次數(shù))
  參數(shù)_線程數(shù) = 變量_次數(shù)
.如果真結(jié)束
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 傳遞信息結(jié)構(gòu)
變量_hHeap = HeapCreate (4, 0, 0)
.如果真 (變量_hHeap = 0)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
' 下載地址指針,回調(diào)函數(shù)地址+4,文件句柄+8,映射句柄+12,堆+16,許可證指針+20,線程數(shù)+24,當(dāng)前線程數(shù)+28,任務(wù)狀態(tài)+32,塊+36,當(dāng)前次數(shù)+40,總次數(shù)+44,完成大小+48,文件大小+52,傳遞完畢+56
變量_msg = HeapAllocHTTP (變量_hHeap, 8, 15 × 4)
.如果真 (變量_msg = 0)
  HeapDestroy (變量_hHeap)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
變量_地址 = HeapAllocHTTP (變量_hHeap, 8, 取文本長(zhǎng)度 (參數(shù)_下載地址) + 1)
.如果真 (變量_地址 = 0)
  HeapDestroy (變量_hHeap)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
RtlMoveMemory_寫(xiě)文本 (變量_地址, 參數(shù)_下載地址, 取文本長(zhǎng)度 (參數(shù)_下載地址) + 1)
變量_許可證 = HeapAllocHTTP (變量_hHeap, 8, 24)
.如果真 (變量_許可證 = 0)
  HeapDestroy (變量_hHeap)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
InitializeCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg, 變量_地址, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 4, 參數(shù)_回調(diào)函數(shù)地址, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 8, 變量_文件句柄, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 12, 變量_映射句柄, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 16, 變量_hHeap, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 20, 變量_許可證, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 24, 參數(shù)_線程數(shù), 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 28, 變量_當(dāng)前線程數(shù), 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 32, 0, 4) ' -1錯(cuò)誤 0開(kāi)始 1停止 2暫停
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 36, 變量_塊, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 40, 0, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 44, 變量_次數(shù), 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 48, 0, 4)
RtlMoveMemory_寫(xiě)整數(shù) (變量_msg + 52, 變量_dwByteToRead, 4)
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 創(chuàng)建線程
變量_進(jìn)程句柄 = CreateThreadHTTP (0, 0, &HTTP下載處理_1_多任務(wù), 變量_msg, 0, 0)
.如果真 (變量_進(jìn)程句柄 = 0)
  DeleteCriticalSectionHTTP (變量_許可證)
  HeapDestroy (變量_hHeap)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
CloseHandleHTTP (變量_進(jìn)程句柄)
返回 (變量_msg)
.子程序 多線程_HTTP下載_停止, , 公開(kāi)
.參數(shù) 參數(shù)_句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_句柄 + 20, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_句柄 + 32, 1, 4) ' -1錯(cuò)誤 0開(kāi)始 1停止 2暫停
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 多線程_HTTP下載_暫停, , 公開(kāi)
.參數(shù) 參數(shù)_句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_句柄 + 20, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_句柄 + 32, 2, 4) ' -1錯(cuò)誤 0開(kāi)始 1停止 2暫停
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 多線程_HTTP下載_繼續(xù), , 公開(kāi)
.參數(shù) 參數(shù)_句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_句柄 + 20, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_句柄 + 32, 0, 4) ' -1錯(cuò)誤 0開(kāi)始 1停止 2暫停
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 HTTP下載處理_1_多任務(wù)
.參數(shù) 參數(shù)_信息指針, 整數(shù)型
.局部變量 變量_回調(diào)函數(shù)地址, 整數(shù)型
.局部變量 變量_文件句柄, 整數(shù)型
.局部變量 變量_映射句柄, 整數(shù)型
.局部變量 變量_堆, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
.局部變量 變量_線程數(shù), 整數(shù)型
.局部變量 變量_總次數(shù), 整數(shù)型
.局部變量 變量_文件大小, 整數(shù)型
.局部變量 變量_當(dāng)前次數(shù), 整數(shù)型
.局部變量 變量_當(dāng)前線程數(shù), 整數(shù)型
.局部變量 變量_任務(wù)狀態(tài), 整數(shù)型
.局部變量 變量_進(jìn)程句柄, 整數(shù)型
.局部變量 變量_傳遞完畢, 整數(shù)型
.局部變量 變量_完成大小, 整數(shù)型
.局部變量 i, 整數(shù)型
.局部變量 a, 文本型
.局部變量 傳遞ID, 整數(shù)型
' 下載地址指針,回調(diào)函數(shù)地址+4,文件句柄+8,映射句柄+12,堆+16,許可證指針+20,線程數(shù)+24,當(dāng)前線程數(shù)+28,任務(wù)狀態(tài)+32,塊+36,當(dāng)前次數(shù)+40,總次數(shù)+44,完成大小+48,文件大小+52,傳遞完畢+56
RtlMoveMemory_讀整數(shù) (變量_回調(diào)函數(shù)地址, 參數(shù)_信息指針 + 4, 4)
RtlMoveMemory_讀整數(shù) (變量_文件句柄, 參數(shù)_信息指針 + 8, 4)
RtlMoveMemory_讀整數(shù) (變量_映射句柄, 參數(shù)_信息指針 + 12, 4)
RtlMoveMemory_讀整數(shù) (變量_堆, 參數(shù)_信息指針 + 16, 4)
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_信息指針 + 20, 4)
RtlMoveMemory_讀整數(shù) (變量_線程數(shù), 參數(shù)_信息指針 + 24, 4)
RtlMoveMemory_讀整數(shù) (變量_總次數(shù), 參數(shù)_信息指針 + 44, 4)
RtlMoveMemory_讀整數(shù) (變量_文件大小, 參數(shù)_信息指針 + 52, 4)
變量_當(dāng)前次數(shù) = 0
.判斷循環(huán)首 (變量_當(dāng)前次數(shù) < 變量_總次數(shù))
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  .如果真 (變量_當(dāng)前線程數(shù) < 變量_線程數(shù))
    EnterCriticalSectionHTTP (變量_許可證)
    RtlMoveMemory_讀整數(shù) (變量_任務(wù)狀態(tài), 參數(shù)_信息指針 + 32, 4)
    LeaveCriticalSectionHTTP (變量_許可證)
    .如果真 (變量_任務(wù)狀態(tài) = -1 或 變量_任務(wù)狀態(tài) = 1)
      跳出循環(huán) ()
    .如果真結(jié)束
    .如果真 (變量_任務(wù)狀態(tài) = 2)
      WaitForSingleObjectHTTP (-1, 100)
      到循環(huán)尾 ()
    .如果真結(jié)束
    變量_當(dāng)前次數(shù) = 變量_當(dāng)前次數(shù) + 1
    RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 40, 變量_當(dāng)前次數(shù), 4)
    變量_進(jìn)程句柄 = CreateThreadHTTP (0, 0, &HTTP下載處理_2_多任務(wù), 參數(shù)_信息指針, 0, 0)
    .如果真 (變量_進(jìn)程句柄 = 0)
      EnterCriticalSectionHTTP (變量_許可證)
      RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
      LeaveCriticalSectionHTTP (變量_許可證)
      跳出循環(huán) ()
    .如果真結(jié)束
    CloseHandleHTTP (變量_進(jìn)程句柄)
    .循環(huán)判斷首 ()
      EnterCriticalSectionHTTP (變量_許可證)
      RtlMoveMemory_讀整數(shù) (變量_傳遞完畢, 參數(shù)_信息指針 + 56, 4)
      LeaveCriticalSectionHTTP (變量_許可證)
      WaitForSingleObjectHTTP (-1, 100)
    .循環(huán)判斷尾 (變量_傳遞完畢 = 0)
  .如果真結(jié)束
  WaitForSingleObjectHTTP (-1, 100)
.判斷循環(huán)尾 ()
.循環(huán)判斷首 ()
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  WaitForSingleObjectHTTP (-1, 100)
.循環(huán)判斷尾 (變量_當(dāng)前線程數(shù) ≠ 0)
RtlMoveMemory_讀整數(shù) (變量_任務(wù)狀態(tài), 參數(shù)_信息指針 + 32, 4)
.判斷開(kāi)始 (變量_任務(wù)狀態(tài) = -1)
  .計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
    .如果真 (參數(shù)_信息指針 = 多任務(wù)句柄 [i])
      傳遞ID = i
    .如果真結(jié)束
  .計(jì)次循環(huán)尾 ()
  .如果真 (傳遞ID ≠ 0)
    程序_Call (變量_回調(diào)函數(shù)地址, 傳遞ID, -1, 0, 0)
    ' 調(diào)用子程序 (變量_回調(diào)函數(shù)地址, , , 傳遞ID, -1, 0, 0)
  .如果真結(jié)束
.判斷 (變量_任務(wù)狀態(tài) = 0)
  RtlMoveMemory_讀整數(shù) (變量_完成大小, 參數(shù)_信息指針 + 48, 4)
  .計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
    .如果真 (參數(shù)_信息指針 = 多任務(wù)句柄 [i])
      傳遞ID = i
    .如果真結(jié)束
  .計(jì)次循環(huán)尾 ()
  .如果真 (傳遞ID ≠ 0)
    程序_Call (變量_回調(diào)函數(shù)地址, 傳遞ID, 0, 變量_文件大小, 變量_完成大小)
    ' 調(diào)用子程序 (變量_回調(diào)函數(shù)地址, , , 傳遞ID, 0, 變量_文件大小, 變量_完成大小)
  .如果真結(jié)束
.默認(rèn)
.判斷結(jié)束
DeleteCriticalSectionHTTP (變量_許可證)
HeapDestroy (變量_堆)
CloseHandleHTTP (變量_映射句柄)
CloseHandleHTTP (變量_文件句柄)
.子程序 HTTP下載處理_2_多任務(wù)
.參數(shù) 參數(shù)_信息指針, 整數(shù)型
.局部變量 變量_下載地址指針, 整數(shù)型
.局部變量 變量_回調(diào)函數(shù)地址, 整數(shù)型
.局部變量 變量_映射句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
.局部變量 變量_堆, 整數(shù)型
.局部變量 變量_當(dāng)前線程數(shù), 整數(shù)型
.局部變量 變量_塊_1, 整數(shù)型
.局部變量 變量_當(dāng)前次數(shù), 整數(shù)型
.局部變量 變量_總次數(shù), 整數(shù)型
.局部變量 變量_文件大小, 整數(shù)型
.局部變量 變量_dwFlags, 整數(shù)型
.局部變量 變量_hOpen, 整數(shù)型
.局部變量 變量_szHead, 文本型
.局部變量 變量_開(kāi)始, 整數(shù)型
.局部變量 變量_結(jié)尾, 整數(shù)型
.局部變量 變量_hConnect, 整數(shù)型
.局部變量 變量_塊_2, 整數(shù)型
.局部變量 變量_http塊, 整數(shù)型
.局部變量 變量_當(dāng)前大小, 整數(shù)型
.局部變量 變量_szTemp, 整數(shù)型
.局部變量 變量_dwSize, 整數(shù)型
.局部變量 變量_寫(xiě)入位置, 整數(shù)型
.局部變量 變量_塊位置, 整數(shù)型
.局部變量 變量_視圖句柄, 整數(shù)型
.局部變量 變量_完成大小, 整數(shù)型
.局部變量 變量_任務(wù)狀態(tài), 整數(shù)型
.局部變量 i, 整數(shù)型
.局部變量 a, 文本型
.局部變量 傳遞ID, 整數(shù)型
' 下載地址指針,回調(diào)函數(shù)地址+4,文件句柄+8,映射句柄+12,堆+16,許可證指針+20,線程數(shù)+24,當(dāng)前線程數(shù)+28,任務(wù)狀態(tài)+32,塊+36,當(dāng)前次數(shù)+40,總次數(shù)+44,完成大小+48,文件大小+52,傳遞完畢+56
RtlMoveMemory_讀整數(shù) (變量_下載地址指針, 參數(shù)_信息指針, 4)
RtlMoveMemory_讀整數(shù) (變量_回調(diào)函數(shù)地址, 參數(shù)_信息指針 + 4, 4)
RtlMoveMemory_讀整數(shù) (變量_映射句柄, 參數(shù)_信息指針 + 12, 4)
RtlMoveMemory_讀整數(shù) (變量_堆, 參數(shù)_信息指針 + 16, 4)
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_信息指針 + 20, 4)
RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
RtlMoveMemory_讀整數(shù) (變量_塊_1, 參數(shù)_信息指針 + 36, 4)
RtlMoveMemory_讀整數(shù) (變量_當(dāng)前次數(shù), 參數(shù)_信息指針 + 40, 4)
RtlMoveMemory_讀整數(shù) (變量_文件大小, 參數(shù)_信息指針 + 52, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) + 1, 4)
RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 56, 1, 4)
LeaveCriticalSectionHTTP (變量_許可證)
InternetGetConnectedStateHTTP (變量_dwFlags, 0)
.如果 (位與 (變量_dwFlags, 4) = 0)
  變量_hOpen = InternetOpenAHTTP (字符 (0), 4, 0, 0, 0)
.否則
  變量_hOpen = InternetOpenAHTTP (字符 (0), 0, 0, 0, 0)
.如果結(jié)束
.如果真 (變量_hOpen = 0)
  ' Internet連接錯(cuò)誤
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  返回 ()
.如果真結(jié)束
.如果 (變量_當(dāng)前次數(shù) = 變量_總次數(shù))
  變量_開(kāi)始 = 變量_塊_1 × (變量_當(dāng)前次數(shù) - 1)
  變量_結(jié)尾 = 變量_文件大小
.否則
  變量_開(kāi)始 = 變量_塊_1 × (變量_當(dāng)前次數(shù) - 1)
  變量_結(jié)尾 = 變量_塊_1 × 變量_當(dāng)前次數(shù) - 1
.如果結(jié)束
變量_szHead = “Accept: */*” + #換行符 + “Accept-Language: zh-cn” + #換行符 + “Accept-Encoding: gzip, deflate” + #換行符 + “User-Agent: Mozilla/4.0(compatible; MSIE 6.0; Windows NT 5.0; MyIE2; .NET CLR 1.1.4322)”
變量_szHead = 變量_szHead + #換行符 + “Range:bytes=” + 到文本 (變量_開(kāi)始) + “-” + 到文本 (變量_結(jié)尾)
變量_hConnect = InternetOpenUrlAHTTP (變量_hOpen, 指針到文本 (變量_下載地址指針), 變量_szHead, 取文本長(zhǎng)度 (變量_szHead), 2214592768, 0)
.如果真 (變量_hConnect = 0)
  ' 不能打開(kāi)該URL!
  InternetCloseHandleHTTP (變量_hOpen)
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  返回 ()
.如果真結(jié)束
變量_塊_2 = 65536
變量_http塊 = 20480
變量_當(dāng)前大小 = 0
變量_szTemp = HeapAllocHTTP (變量_堆, 8, 變量_http塊)
.如果真 (變量_szTemp = 0)
  InternetCloseHandleHTTP (變量_hConnect)
  InternetCloseHandleHTTP (變量_hOpen)
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  返回 ()
.如果真結(jié)束
.循環(huán)判斷首 ()
  .如果真 (InternetReadFileHTTP (變量_hConnect, 變量_szTemp, 變量_http塊, 變量_dwSize) = 0)
    ' 讀文件失敗
    EnterCriticalSectionHTTP (變量_許可證)
    RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
    LeaveCriticalSectionHTTP (變量_許可證)
    跳出循環(huán) ()
  .如果真結(jié)束
  .如果真 (變量_dwSize = 0)
    跳出循環(huán) ()
  .如果真結(jié)束
  變量_寫(xiě)入位置 = 變量_開(kāi)始 + 變量_當(dāng)前大小
  變量_塊位置 = 變量_寫(xiě)入位置 ÷ 變量_塊_2
  變量_塊位置 = 變量_塊位置 × 變量_塊_2
  變量_視圖句柄 = 映射裝載 (變量_映射句柄, 2, 0, 變量_塊位置, 變量_寫(xiě)入位置 - 變量_塊位置 + 變量_dwSize)
  .如果真 (變量_視圖句柄 = 0)
    ' 映射裝載失敗
    EnterCriticalSectionHTTP (變量_許可證)
    RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
    LeaveCriticalSectionHTTP (變量_許可證)
    跳出循環(huán) ()
  .如果真結(jié)束
  寫(xiě)入映射 (變量_視圖句柄 + 變量_寫(xiě)入位置 - 變量_塊位置, 變量_szTemp, 變量_dwSize)
  映射卸載 (變量_視圖句柄)
  變量_當(dāng)前大小 = 變量_當(dāng)前大小 + 變量_dwSize
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_讀整數(shù) (變量_完成大小, 參數(shù)_信息指針 + 48, 4)
  變量_完成大小 = 變量_完成大小 + 變量_dwSize
  RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 48, 變量_完成大小, 4)
  ' 輸出調(diào)試文本 (參數(shù)_信息指針)
  .計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
    .如果真 (參數(shù)_信息指針 = 多任務(wù)句柄 [i])
      傳遞ID = i
    .如果真結(jié)束
  .計(jì)次循環(huán)尾 ()
  .如果真 (傳遞ID ≠ 0)
    程序_Call (變量_回調(diào)函數(shù)地址, 傳遞ID, 1, 變量_文件大小, 變量_完成大小)
    ' 調(diào)用子程序 (變量_回調(diào)函數(shù)地址, , , 傳遞ID, 1, 變量_文件大小, 變量_完成大小)
  .如果真結(jié)束
  RtlMoveMemory_讀整數(shù) (變量_任務(wù)狀態(tài), 參數(shù)_信息指針 + 32, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  .判斷循環(huán)首 (變量_任務(wù)狀態(tài) = 2)
    EnterCriticalSectionHTTP (變量_許可證)
    RtlMoveMemory_讀整數(shù) (變量_任務(wù)狀態(tài), 參數(shù)_信息指針 + 32, 4)
    LeaveCriticalSectionHTTP (變量_許可證)
    .如果真 (變量_任務(wù)狀態(tài) = -1 或 變量_任務(wù)狀態(tài) = 1)
      跳出循環(huán) ()
    .如果真結(jié)束
    WaitForSingleObjectHTTP (-1, 100)
  .判斷循環(huán)尾 ()
.循環(huán)判斷尾 (變量_任務(wù)狀態(tài) ≠ -1 且 變量_任務(wù)狀態(tài) ≠ 1)
HeapFree (變量_堆, 0, 變量_szTemp)
InternetCloseHandleHTTP (變量_hConnect)
InternetCloseHandleHTTP (變量_hOpen)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
RtlMoveMemory_寫(xiě)整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 Call, 整數(shù)型, 公開(kāi)
.參數(shù) 參數(shù)_地址, 整數(shù)型
.參數(shù) 參數(shù)_一, 整數(shù)型
.參數(shù) 參數(shù)_二, 整數(shù)型
.參數(shù) 參數(shù)_三, 整數(shù)型
置入代碼 ({ 201, 88, 135, 4, 36, 255, 224 })
返回 (0)
.子程序 程序_Call, 整數(shù)型
.參數(shù) 子程序地址, 整數(shù)型
.參數(shù) 參數(shù)1, 整數(shù)型, 可空
.參數(shù) 參數(shù)2, 整數(shù)型, 可空
.參數(shù) 參數(shù)3, 整數(shù)型, 可空
.參數(shù) 參數(shù)4, 整數(shù)型, 可空
.參數(shù) 參數(shù)5, 整數(shù)型, 可空
.參數(shù) 參數(shù)6, 整數(shù)型, 可空
.參數(shù) 參數(shù)7, 整數(shù)型, 可空
.參數(shù) 參數(shù)8, 整數(shù)型, 可空
.參數(shù) 參數(shù)9, 整數(shù)型, 可空
.參數(shù) 參數(shù)10, 整數(shù)型, 可空
.參數(shù) 參數(shù)11, 整數(shù)型, 可空
.參數(shù) 參數(shù)12, 整數(shù)型, 可空
.參數(shù) 參數(shù)13, 整數(shù)型, 可空
.參數(shù) 參數(shù)14, 整數(shù)型, 可空
.參數(shù) 參數(shù)15, 整數(shù)型, 可空
置入代碼 ({ 86, 190, 15, 0, 0, 0, 141, 77, 8, 141, 76, 241, 252, 139, 65, 4, 133, 192, 116, 2, 255, 49, 78, 131, 233, 8, 133, 246, 117, 239, 255, 85, 8, 94, 201, 194, 124, 0 })
返回 (0)

4.多任務(wù)下載

.版本 2
.程序集 下載_多任務(wù), , 公開(kāi)
.程序集變量 總計(jì)次, 整數(shù)型
.子程序 _初始化, , , 當(dāng)基于本類的對(duì)象被創(chuàng)建后,此方法會(huì)被自動(dòng)調(diào)用
總計(jì)次 = 0
.子程序 _銷毀, , , 當(dāng)基于本類的對(duì)象被銷毀前,此方法會(huì)被自動(dòng)調(diào)用
.子程序 下載_多任務(wù), , 公開(kāi)
.參數(shù) 下載地址, 文本型
.參數(shù) 保存路徑, 文本型
.參數(shù) 線程數(shù), 整數(shù)型
.參數(shù) 回調(diào)函數(shù)地址, 整數(shù)型, 可空, 無(wú)返回值,傳遞ID=整數(shù)型,信息=整數(shù)型,文件大小=整數(shù)型,完成大小=整數(shù)型
.局部變量 a, 整數(shù)型
總計(jì)次 = 總計(jì)次 + 1
加入成員 (配備文本變量, 到文本 (總計(jì)次))
a = 多線程_HTTP下載_開(kāi)始_多任務(wù) (下載地址, 保存路徑, 線程數(shù), 回調(diào)函數(shù)地址)
加入成員 (多任務(wù)句柄, a)
.子程序 暫停下載, , 公開(kāi)
.參數(shù) 暫停ID, 整數(shù)型
多線程_HTTP下載_暫停 (多任務(wù)句柄 [暫停ID])
.子程序 全部暫停, , 公開(kāi)
.局部變量 i, 整數(shù)型
.計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_暫停 (多任務(wù)句柄 [i])
.計(jì)次循環(huán)尾 ()
.子程序 停止下載
.參數(shù) 停止ID, 整數(shù)型
多線程_HTTP下載_停止 (多任務(wù)句柄 [停止ID])
.子程序 全部停止, , 公開(kāi)
.局部變量 i, 整數(shù)型
.計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_停止 (多任務(wù)句柄 [i])
.計(jì)次循環(huán)尾 ()
.子程序 繼續(xù)下載, , 公開(kāi)
.參數(shù) 繼續(xù)ID, 整數(shù)型
多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [繼續(xù)ID])
.子程序 全部繼續(xù), , 公開(kāi)
.局部變量 i, 整數(shù)型
.計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [i])
.計(jì)次循環(huán)尾 ()
.子程序 重試下載, , 公開(kāi)
.參數(shù) 重試ID, 整數(shù)型
多線程_HTTP下載_停止 (多任務(wù)句柄 [重試ID])
多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [重試ID])
.子程序 全部重試, , 公開(kāi)
.局部變量 i, 整數(shù)型
.計(jì)次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_停止 (多任務(wù)句柄 [i])
  多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [i])
.計(jì)次循環(huán)尾 ()

以上是模塊代碼,下面是窗口程序集代碼。

多線程多任務(wù)下載源碼

需要加載上面的多線程多任務(wù)下載的模塊

.版本 2
.支持庫(kù) iext
.程序集 窗口程序集1
.程序集變量 計(jì)次, 整數(shù)型
.程序集變量 下載, 下載_多任務(wù)
.程序集變量 速度1, 整數(shù)型
.程序集變量 速度2, 整數(shù)型
.子程序 內(nèi)部回調(diào), , 公開(kāi)
.參數(shù) 傳遞ID, 整數(shù)型
.參數(shù) 信息
.參數(shù) 文件大小
.參數(shù) 完成大小
.局部變量 索引, 整數(shù)型
.局部變量 顯示完成大小, 文本型
.局部變量 顯示文件大小, 文本型
.如果真 (傳遞ID > 3 或 傳遞ID < 0)
  返回 ()
.如果真結(jié)束
.如果真 (傳遞ID = 1)
  索引 = 0
.如果真結(jié)束
.如果真 (傳遞ID = 2)
  索引 = 1
.如果真結(jié)束
.如果真 (傳遞ID = 3)
  索引 = 2
.如果真結(jié)束
.如果真 (四舍五入 (完成大小, 1) < 1024)
  顯示文件大小 = 到文本 (四舍五入 (文件大小, 1)) + “ Byte”
.如果真結(jié)束
.如果真 (四舍五入 (完成大小, 1) > 1024)
  顯示文件大小 = 到文本 (四舍五入 (文件大小 ÷ 1024, 1)) + “ KB”
.如果真結(jié)束
.如果真 (四舍五入 (完成大小 ÷ 1024, 1) > 1024)
  顯示文件大小 = 到文本 (四舍五入 (文件大小 ÷ 1024 ÷ 1024, 1)) + “ MB”
.如果真結(jié)束
.如果真 (四舍五入 (文件大小 ÷ 1024 ÷ 1024, 1) > 1024)
  顯示文件大小 = 到文本 (四舍五入 (文件大小 ÷ 1024 ÷ 1024 ÷ 1024, 1)) + “ GB”
.如果真結(jié)束
.如果真 (四舍五入 (完成大小, 1) < 1024)
  顯示完成大小 = 到文本 (四舍五入 (完成大小, 1)) + “ Byte”
.如果真結(jié)束
.如果真 (四舍五入 (完成大小, 1) > 1024)
  顯示完成大小 = 到文本 (四舍五入 (完成大小 ÷ 1024, 1)) + “ KB”
.如果真結(jié)束
.如果真 (四舍五入 (完成大小 ÷ 1024, 1) > 1024)
  顯示完成大小 = 到文本 (四舍五入 (完成大小 ÷ 1024 ÷ 1024, 1)) + “ MB”
.如果真結(jié)束
.如果真 (四舍五入 (完成大小 ÷ 1024 ÷ 1024, 1) > 1024)
  顯示完成大小 = 到文本 (四舍五入 (完成大小 ÷ 1024 ÷ 1024 ÷ 1024, 1)) + “ GB”
.如果真結(jié)束
超級(jí)列表框1.置標(biāo)題 (索引, 2, 顯示完成大小)
超級(jí)列表框1.置標(biāo)題 (索引, 3, 顯示文件大小)
超級(jí)列表框1.置標(biāo)題 (索引, 4, 到文本 (到整數(shù) (完成大小 ÷ 文件大小 × 100)) + “%”)
超級(jí)列表框1.置標(biāo)題 (索引, 5, “下載中”)
.子程序 _下載按鈕_被單擊
.局部變量 索引, 整數(shù)型
.如果真 (輸入編輯框.內(nèi)容 = “”)
  返回 ()
.如果真結(jié)束
下載.下載_多任務(wù) (輸入編輯框.內(nèi)容, “C:\Users\Administrator\Desktop\” + 取網(wǎng)絡(luò)文件名稱 (輸入編輯框.內(nèi)容), 10, 到整數(shù) (&內(nèi)部回調(diào)))
計(jì)次 = 計(jì)次 + 1
索引 = 超級(jí)列表框1.插入表項(xiàng) (, , , , , )
超級(jí)列表框1.置標(biāo)題 (索引, 0, 到文本 (計(jì)次))
超級(jí)列表框1.置標(biāo)題 (索引, 1, 取網(wǎng)絡(luò)文件名稱 (輸入編輯框.內(nèi)容))
.子程序 程序_Call, 整數(shù)型
.參數(shù) 子程序地址, 整數(shù)型
.參數(shù) 參數(shù)1, 整數(shù)型, 可空
.參數(shù) 參數(shù)2, 整數(shù)型, 可空
.參數(shù) 參數(shù)3, 整數(shù)型, 可空
.參數(shù) 參數(shù)4, 整數(shù)型, 可空
.參數(shù) 參數(shù)5, 整數(shù)型, 可空
.參數(shù) 參數(shù)6, 整數(shù)型, 可空
.參數(shù) 參數(shù)7, 整數(shù)型, 可空
.參數(shù) 參數(shù)8, 整數(shù)型, 可空
.參數(shù) 參數(shù)9, 整數(shù)型, 可空
.參數(shù) 參數(shù)10, 整數(shù)型, 可空
.參數(shù) 參數(shù)11, 整數(shù)型, 可空
.參數(shù) 參數(shù)12, 整數(shù)型, 可空
.參數(shù) 參數(shù)13, 整數(shù)型, 可空
.參數(shù) 參數(shù)14, 整數(shù)型, 可空
.參數(shù) 參數(shù)15, 整數(shù)型, 可空
置入代碼 ({ 86, 190, 15, 0, 0, 0, 141, 77, 8, 141, 76, 241, 252, 139, 65, 4, 133, 192, 116, 2, 255, 49, 78, 131, 233, 8, 133, 246, 117, 239, 255, 85, 8, 94, 201, 194, 124, 0 })
返回 (0)
.子程序 取網(wǎng)絡(luò)文件名稱, 文本型
.參數(shù) 路徑, 文本型
.局部變量 a, 文本型, , "0"
a = 分割文本 (路徑, “/”, )
返回 (a [取數(shù)組成員數(shù) (a)])
.子程序 _標(biāo)簽1_鼠標(biāo)左鍵被放開(kāi), 邏輯型
.參數(shù) 橫向位置, 整數(shù)型
.參數(shù) 縱向位置, 整數(shù)型
.參數(shù) 功能鍵狀態(tài), 整數(shù)型
置剪輯板文本 (標(biāo)簽1.標(biāo)題)
輸入編輯框.內(nèi)容 = 標(biāo)簽1.標(biāo)題
.子程序 _標(biāo)簽2_鼠標(biāo)左鍵被放開(kāi), 邏輯型
.參數(shù) 橫向位置, 整數(shù)型
.參數(shù) 縱向位置, 整數(shù)型
.參數(shù) 功能鍵狀態(tài), 整數(shù)型
置剪輯板文本 (標(biāo)簽2.標(biāo)題)
輸入編輯框.內(nèi)容 = 標(biāo)簽2.標(biāo)題
.子程序 _標(biāo)簽3_鼠標(biāo)左鍵被放開(kāi), 邏輯型
.參數(shù) 橫向位置, 整數(shù)型
.參數(shù) 縱向位置, 整數(shù)型
.參數(shù) 功能鍵狀態(tài), 整數(shù)型
置剪輯板文本 (標(biāo)簽3.標(biāo)題)
輸入編輯框.內(nèi)容 = 標(biāo)簽3.標(biāo)題
.子程序 _暫停按鈕_被單擊
下載.全部暫停 ()
.子程序 _繼續(xù)下載按鈕_被單擊
下載.全部繼續(xù) ()
.子程序 _停止按鈕_被單擊
下載.全部停止 ()

運(yùn)行結(jié)果:

使用易語(yǔ)言編寫(xiě)一個(gè)多線程多任務(wù)下載器

上述內(nèi)容就是使用易語(yǔ)言編寫(xiě)一個(gè)多線程多任務(wù)下載器,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI