使用易語言編寫一個多線程多任務(wù)下載器

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

專注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)邵原免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

1.DLL命令表

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

2.全局變量表

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

3.多線程

.版本 2
.程序集 程序集2
.子程序 文件_取網(wǎng)絡(luò)文件名1, 文本型, 公開
.參數(shù) 地址, 文本型
.局部變量 Onlined, 邏輯型
.局部變量 dwFlags, 整數(shù)型
.局部變量 strAgent, 文本型
.局部變量 hConnect, 整數(shù)型
.局部變量 hOpen, 整數(shù)型
.局部變量 szTemp, 文本型
.局部變量 dwSizeOfRq, 整數(shù)型
Onlined = InternetGetConnectedState (dwFlags, 0)
.如果真 (Onlined = 假)
  返回 (取文件名11 (地址))
.如果真結(jié)束
strAgent = “我的下載” + 到文本 (取啟動時間 ())
.如果 (位與 (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, 取文本長度 (szTemp) - i)
.如果真結(jié)束
i = 尋找文本 (szTemp, “?”, , 假)
.如果真 (i = -1)
  返回 (szTemp)
.如果真結(jié)束
返回 (取文本左邊 (szTemp, i - 1))
.子程序 文件_取擴(kuò)展名, 文本型, 公開, 返回一個文件的后綴名,如:.jpg 如果沒有后綴,返回空
.參數(shù) 文件名, 文本型, , 需要處理的原始文件名
返回 (PathFindExtensionAjtw (文件名))
.子程序 多線程_HTTP下載_開始_多任務(wù), 整數(shù)型
.參數(shù) 參數(shù)_下載地址, 文本型
.參數(shù) 參數(shù)_保存路徑, 文本型, , 可以只填寫下載路徑,程序?qū)韵螺d地址的文件名來保存,如果自己添加路徑加文件名,則程序會將以自己添加的文件名來命名,注意:路徑中不能有 . ,除非是添加路徑加文件名
.參數(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) ' 那么就是 路徑 ,沒有文件名
  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連接錯誤
  返回 (-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, 取文本長度 (變量_szHead), 2214592768, 0)
.如果真 (變量_hConnect = 0)
  ' 不能打開該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é)束
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 計算分段
變量_塊 = 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, 取文本長度 (參數(shù)_下載地址) + 1)
.如果真 (變量_地址 = 0)
  HeapDestroy (變量_hHeap)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
RtlMoveMemory_寫文本 (變量_地址, 參數(shù)_下載地址, 取文本長度 (參數(shù)_下載地址) + 1)
變量_許可證 = HeapAllocHTTP (變量_hHeap, 8, 24)
.如果真 (變量_許可證 = 0)
  HeapDestroy (變量_hHeap)
  CloseHandleHTTP (變量_映射句柄)
  CloseHandleHTTP (變量_文件句柄)
  返回 (-1)
.如果真結(jié)束
InitializeCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫整數(shù) (變量_msg, 變量_地址, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 4, 參數(shù)_回調(diào)函數(shù)地址, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 8, 變量_文件句柄, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 12, 變量_映射句柄, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 16, 變量_hHeap, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 20, 變量_許可證, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 24, 參數(shù)_線程數(shù), 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 28, 變量_當(dāng)前線程數(shù), 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 32, 0, 4) ' -1錯誤 0開始 1停止 2暫停
RtlMoveMemory_寫整數(shù) (變量_msg + 36, 變量_塊, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 40, 0, 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 44, 變量_次數(shù), 4)
RtlMoveMemory_寫整數(shù) (變量_msg + 48, 0, 4)
RtlMoveMemory_寫整數(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下載_停止, , 公開
.參數(shù) 參數(shù)_句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_句柄 + 20, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫整數(shù) (參數(shù)_句柄 + 32, 1, 4) ' -1錯誤 0開始 1停止 2暫停
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 多線程_HTTP下載_暫停, , 公開
.參數(shù) 參數(shù)_句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_句柄 + 20, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫整數(shù) (參數(shù)_句柄 + 32, 2, 4) ' -1錯誤 0開始 1停止 2暫停
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 多線程_HTTP下載_繼續(xù), , 公開
.參數(shù) 參數(shù)_句柄, 整數(shù)型
.局部變量 變量_許可證, 整數(shù)型
RtlMoveMemory_讀整數(shù) (變量_許可證, 參數(shù)_句柄 + 20, 4)
EnterCriticalSectionHTTP (變量_許可證)
RtlMoveMemory_寫整數(shù) (參數(shù)_句柄 + 32, 0, 4) ' -1錯誤 0開始 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_寫整數(shù) (參數(shù)_信息指針 + 40, 變量_當(dāng)前次數(shù), 4)
    變量_進(jìn)程句柄 = CreateThreadHTTP (0, 0, &HTTP下載處理_2_多任務(wù), 參數(shù)_信息指針, 0, 0)
    .如果真 (變量_進(jìn)程句柄 = 0)
      EnterCriticalSectionHTTP (變量_許可證)
      RtlMoveMemory_寫整數(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)
.判斷開始 (變量_任務(wù)狀態(tài) = -1)
  .計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
    .如果真 (參數(shù)_信息指針 = 多任務(wù)句柄 [i])
      傳遞ID = i
    .如果真結(jié)束
  .計次循環(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)
  .計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
    .如果真 (參數(shù)_信息指針 = 多任務(wù)句柄 [i])
      傳遞ID = i
    .如果真結(jié)束
  .計次循環(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, 文本型
.局部變量 變量_開始, 整數(shù)型
.局部變量 變量_結(jié)尾, 整數(shù)型
.局部變量 變量_hConnect, 整數(shù)型
.局部變量 變量_塊_2, 整數(shù)型
.局部變量 變量_http塊, 整數(shù)型
.局部變量 變量_當(dāng)前大小, 整數(shù)型
.局部變量 變量_szTemp, 整數(shù)型
.局部變量 變量_dwSize, 整數(shù)型
.局部變量 變量_寫入位置, 整數(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_寫整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) + 1, 4)
RtlMoveMemory_寫整數(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連接錯誤
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  返回 ()
.如果真結(jié)束
.如果 (變量_當(dāng)前次數(shù) = 變量_總次數(shù))
  變量_開始 = 變量_塊_1 × (變量_當(dāng)前次數(shù) - 1)
  變量_結(jié)尾 = 變量_文件大小
.否則
  變量_開始 = 變量_塊_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=” + 到文本 (變量_開始) + “-” + 到文本 (變量_結(jié)尾)
變量_hConnect = InternetOpenUrlAHTTP (變量_hOpen, 指針到文本 (變量_下載地址指針), 變量_szHead, 取文本長度 (變量_szHead), 2214592768, 0)
.如果真 (變量_hConnect = 0)
  ' 不能打開該URL!
  InternetCloseHandleHTTP (變量_hOpen)
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  RtlMoveMemory_寫整數(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_寫整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
  RtlMoveMemory_讀整數(shù) (變量_當(dāng)前線程數(shù), 參數(shù)_信息指針 + 28, 4)
  RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
  LeaveCriticalSectionHTTP (變量_許可證)
  返回 ()
.如果真結(jié)束
.循環(huán)判斷首 ()
  .如果真 (InternetReadFileHTTP (變量_hConnect, 變量_szTemp, 變量_http塊, 變量_dwSize) = 0)
    ' 讀文件失敗
    EnterCriticalSectionHTTP (變量_許可證)
    RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
    LeaveCriticalSectionHTTP (變量_許可證)
    跳出循環(huán) ()
  .如果真結(jié)束
  .如果真 (變量_dwSize = 0)
    跳出循環(huán) ()
  .如果真結(jié)束
  變量_寫入位置 = 變量_開始 + 變量_當(dāng)前大小
  變量_塊位置 = 變量_寫入位置 ÷ 變量_塊_2
  變量_塊位置 = 變量_塊位置 × 變量_塊_2
  變量_視圖句柄 = 映射裝載 (變量_映射句柄, 2, 0, 變量_塊位置, 變量_寫入位置 - 變量_塊位置 + 變量_dwSize)
  .如果真 (變量_視圖句柄 = 0)
    ' 映射裝載失敗
    EnterCriticalSectionHTTP (變量_許可證)
    RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 32, -1, 4)
    LeaveCriticalSectionHTTP (變量_許可證)
    跳出循環(huán) ()
  .如果真結(jié)束
  寫入映射 (變量_視圖句柄 + 變量_寫入位置 - 變量_塊位置, 變量_szTemp, 變量_dwSize)
  映射卸載 (變量_視圖句柄)
  變量_當(dāng)前大小 = 變量_當(dāng)前大小 + 變量_dwSize
  EnterCriticalSectionHTTP (變量_許可證)
  RtlMoveMemory_讀整數(shù) (變量_完成大小, 參數(shù)_信息指針 + 48, 4)
  變量_完成大小 = 變量_完成大小 + 變量_dwSize
  RtlMoveMemory_寫整數(shù) (參數(shù)_信息指針 + 48, 變量_完成大小, 4)
  ' 輸出調(diào)試文本 (參數(shù)_信息指針)
  .計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
    .如果真 (參數(shù)_信息指針 = 多任務(wù)句柄 [i])
      傳遞ID = i
    .如果真結(jié)束
  .計次循環(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_寫整數(shù) (參數(shù)_信息指針 + 28, 變量_當(dāng)前線程數(shù) - 1, 4)
LeaveCriticalSectionHTTP (變量_許可證)
.子程序 Call, 整數(shù)型, 公開
.參數(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ù), , 公開
.程序集變量 總計次, 整數(shù)型
.子程序 _初始化, , , 當(dāng)基于本類的對象被創(chuàng)建后,此方法會被自動調(diào)用
總計次 = 0
.子程序 _銷毀, , , 當(dāng)基于本類的對象被銷毀前,此方法會被自動調(diào)用
.子程序 下載_多任務(wù), , 公開
.參數(shù) 下載地址, 文本型
.參數(shù) 保存路徑, 文本型
.參數(shù) 線程數(shù), 整數(shù)型
.參數(shù) 回調(diào)函數(shù)地址, 整數(shù)型, 可空, 無返回值,傳遞ID=整數(shù)型,信息=整數(shù)型,文件大小=整數(shù)型,完成大小=整數(shù)型
.局部變量 a, 整數(shù)型
總計次 = 總計次 + 1
加入成員 (配備文本變量, 到文本 (總計次))
a = 多線程_HTTP下載_開始_多任務(wù) (下載地址, 保存路徑, 線程數(shù), 回調(diào)函數(shù)地址)
加入成員 (多任務(wù)句柄, a)
.子程序 暫停下載, , 公開
.參數(shù) 暫停ID, 整數(shù)型
多線程_HTTP下載_暫停 (多任務(wù)句柄 [暫停ID])
.子程序 全部暫停, , 公開
.局部變量 i, 整數(shù)型
.計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_暫停 (多任務(wù)句柄 [i])
.計次循環(huán)尾 ()
.子程序 停止下載
.參數(shù) 停止ID, 整數(shù)型
多線程_HTTP下載_停止 (多任務(wù)句柄 [停止ID])
.子程序 全部停止, , 公開
.局部變量 i, 整數(shù)型
.計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_停止 (多任務(wù)句柄 [i])
.計次循環(huán)尾 ()
.子程序 繼續(xù)下載, , 公開
.參數(shù) 繼續(xù)ID, 整數(shù)型
多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [繼續(xù)ID])
.子程序 全部繼續(xù), , 公開
.局部變量 i, 整數(shù)型
.計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [i])
.計次循環(huán)尾 ()
.子程序 重試下載, , 公開
.參數(shù) 重試ID, 整數(shù)型
多線程_HTTP下載_停止 (多任務(wù)句柄 [重試ID])
多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [重試ID])
.子程序 全部重試, , 公開
.局部變量 i, 整數(shù)型
.計次循環(huán)首 (取數(shù)組成員數(shù) (多任務(wù)句柄), i)
  多線程_HTTP下載_停止 (多任務(wù)句柄 [i])
  多線程_HTTP下載_繼續(xù) (多任務(wù)句柄 [i])
.計次循環(huán)尾 ()

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

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

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

.版本 2
.支持庫 iext
.程序集 窗口程序集1
.程序集變量 計次, 整數(shù)型
.程序集變量 下載, 下載_多任務(wù)
.程序集變量 速度1, 整數(shù)型
.程序集變量 速度2, 整數(shù)型
.子程序 內(nèi)部回調(diào), , 公開
.參數(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é)束
超級列表框1.置標(biāo)題 (索引, 2, 顯示完成大小)
超級列表框1.置標(biāo)題 (索引, 3, 顯示文件大小)
超級列表框1.置標(biāo)題 (索引, 4, 到文本 (到整數(shù) (完成大小 ÷ 文件大小 × 100)) + “%”)
超級列表框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)))
計次 = 計次 + 1
索引 = 超級列表框1.插入表項 (, , , , , )
超級列表框1.置標(biāo)題 (索引, 0, 到文本 (計次))
超級列表框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)左鍵被放開, 邏輯型
.參數(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)左鍵被放開, 邏輯型
.參數(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)左鍵被放開, 邏輯型
.參數(shù) 橫向位置, 整數(shù)型
.參數(shù) 縱向位置, 整數(shù)型
.參數(shù) 功能鍵狀態(tài), 整數(shù)型
置剪輯板文本 (標(biāo)簽3.標(biāo)題)
輸入編輯框.內(nèi)容 = 標(biāo)簽3.標(biāo)題
.子程序 _暫停按鈕_被單擊
下載.全部暫停 ()
.子程序 _繼續(xù)下載按鈕_被單擊
下載.全部繼續(xù) ()
.子程序 _停止按鈕_被單擊
下載.全部停止 ()

運行結(jié)果:

使用易語言編寫一個多線程多任務(wù)下載器

上述內(nèi)容就是使用易語言編寫一個多線程多任務(wù)下載器,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

本文標(biāo)題:使用易語言編寫一個多線程多任務(wù)下載器
URL分享:http://bm7419.com/article38/gosspp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站策劃、網(wǎng)站改版、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化