SyDr
Сидра
- Сообщения
- 651
- Репутация
- 158
Честно говоря, я не уверен, что дело в InetGet (может InetGetInfo, а может вообще это настройки моей системы). Поэтому мне нужна помощь, чтобы разобраться.
Говорят, в XP работает, как надо.
После нажатия кнопки старт, через некоторое время курсор начинает менять свой вид с обычного на "загрузка" и назад. Проверка показала, что во время работы происходит постоянный запуск "C:\Windows\system32\rundll32.exe" "C:\Windows\system32\WININET.dll",DispatchAPICall 1 . Среднее время жизни процесса - 200-300 мс.
Прошу помочь разобраться в том, что же это такое:
1) Баг AutoIt
2) Баг Windows 7
3) Какие-либо настройки именно в моей системе.
Код.
Говорят, в XP работает, как надо.
После нажатия кнопки старт, через некоторое время курсор начинает менять свой вид с обычного на "загрузка" и назад. Проверка показала, что во время работы происходит постоянный запуск "C:\Windows\system32\rundll32.exe" "C:\Windows\system32\WININET.dll",DispatchAPICall 1 . Среднее время жизни процесса - 200-300 мс.
Прошу помочь разобраться в том, что же это такое:
1) Баг AutoIt
2) Баг Windows 7
3) Какие-либо настройки именно в моей системе.
Код.
Для тестирования. Файл DownLoad.txt должен содержать ссылки для скачки. По одной на строчку. Чем выше скорость соединения - тем больше нужно ссылок (ну или выбирать вещи покрупнее).
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>
AutoItSetOption("GUIOnEventMode", 1)
Global Const $nMaxStreams = 6
Global $sDownloadToFolder = @ScriptDir & "\"
Global $avMSD[$nMaxStreams][5]
Global $avMSDS[1][3]
Global $nStackToDownload = 0
Global $avMSDC[$nMaxStreams][2]
Global $nStackDownloaded = 0
Global $nTotalImagesDownloaded = 0
$hGUIMain = GUICreate("Foto.Tut.By Downloader", 801, 617, 225, 148)
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIExit")
$hButtonAdd = GUICtrlCreateButton("Старт", 480, 8, 313, 25, 0)
$hButtonExit = GUICtrlCreateButton("Выход", 480, 488, 313, 25, 0)
GUICtrlSetOnEvent($hButtonAdd, "GUIProcess")
GUICtrlSetOnEvent($hButtonExit, "GUIProcess")
GUISetState(@SW_SHOW)
While 1
Sleep(1000)
MultiStreamDownload()
WEnd
Func GUIProcess()
Switch @GUI_CtrlId
Case $hButtonAdd
Dim $x
_FileReadToArray("DownLoad.txt", $x)
For $i = 1 To $x[0]
MultiStreamDownload($x[$i], $sDownloadToFolder & "\xx" & $i & ".html")
Next
Case $hButtonExit
GUIExit()
EndSwitch
EndFunc
Func GUIExit()
Exit
EndFunc
Func MultiStreamDownload($sURL = "", $sPath = "", $nOptions = 0)
Local $nCount
Local $bStack = True
If $sURL = "" And $sPath = "" Then $bStack = False
For $nCount = 0 To $nMaxStreams - 1
If $avMSD[$nCount][0] Then
If InetGetInfo($avMSD[$nCount][1], 2) Then
InetClose($avMSD[$nCount][1])
$avMSD[$nCount][0] = False
If $nOptions <> 0 Then
$avMSDC[$nStackDownloaded][0] = $avMSD[$nCount][3]
$avMSDC[$nStackDownloaded][1] = $avMSD[$nCount][4]
$nStackDownloaded += 1
Else
$nTotalImagesDownloaded += 1
EndIf
EndIf
EndIf
If $avMSD[$nCount][0] = False Then
If $nStackToDownload > 0 Then
$nStackToDownload -= 1
$avMSD[$nCount][0] = True
$avMSD[$nCount][1] = InetGet($avMSDS[$nStackToDownload][0], $avMSDS[$nStackToDownload][1], 0, 1)
$avMSD[$nCount][2] = $avMSDS[$nStackToDownload][0]
$avMSD[$nCount][3] = $avMSDS[$nStackToDownload][1]
$avMSD[$nCount][4] = $avMSDS[$nStackToDownload][2]
Else
If $bStack Then
$bStack = False
$avMSD[$nCount][0] = True
$avMSD[$nCount][1] = InetGet($sURL, $sPath, 0, 1)
$avMSD[$nCount][2] = $sURL
$avMSD[$nCount][3] = $sPath
$avMSD[$nCount][4] = $nOptions
EndIf
EndIf
EndIf
Next
If $bStack Then
If UBound($avMSDS, 1) = $nStackToDownload Then ReDim $avMSDS[UBound($avMSDS, 1) * 2][3]
$avMSDS[$nStackToDownload][0] = $sURL
$avMSDS[$nStackToDownload][1] = $sPath
$avMSDS[$nStackToDownload][2] = $nOptions
$nStackToDownload += 1
If (UBound($avMSDS, 1) - $nStackToDownload)/$nStackToDownload > 10 Then ReDim $avMSDS[$nStackToDownload + 1][3]
EndIf
EndFunc