Что нового

[Сеть, интернет] Возможно ли запустить несколько закачек из интернета одновременно?

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Здравствуйте.
Использую AutoIt: v.3.3.8.1

Есть несколько функций загрузки из интернета, вот например загрузка Dr.WEB-CureIt

Код:
;Функция загрузки Dr.Web
Func _1()
GUISetState(@SW_HIDE)
ProgressOn('Скачивание файла', 'Dr.WEB-CureIt', '0 %', -1, -1, 18)
	$hDownloadD = InetGet('http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe', @ScriptDir & '\drweb-cureit.exe', 1, 1)
Do
    If InetGetInfo($hDownloadD, 1) Then
        $iPersent = Round((InetGetInfo($hDownloadD, 0) / InetGetInfo($hDownloadD, 1)) * 100)
        ProgressSet($iPersent, $iPersent & ' %, ' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadD, 0)) & ' (' & _WinAPI_StrFormatByteSize(InetGetInfo($hDownloadD, 1)) & ')')
	EndIf
    Sleep(500)
Until InetGetInfo($hDownloadD, 2)
InetClose($hDownloadD)
ProgressOff()

$InetSize = InetGetSize("http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe", 1)
$FileSize = FileGetSize(@ScriptDir & "\drweb-cureit.exe")
If $InetSize <> $FileSize Then
	_1()
EndIf

EndFunc

И таких функций несколько. Возможно ли запустить их одновременно? Ну или хотябы через какой-то интервал времени, но не дожидаясь окончания первой?
Что-бы загрузка по нескольким функциям была одновременной.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Несколько функций сразу ты можешь запустить, но работать будет последняя запущенная, остальные приостановлены,после завершения функции управление получает предпоследняя и т д. Несколько загрузок сразу inetget поддерживает, открой справку и кури пример.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Можно запустить несколько InetGet() в асинхронном режиме. В этом случае скачивание будет выполняться одновременно, но проверку - InetGetInfo() - ты должен выполнять в одном цикле.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
madmasles
в данном примере только две позиции могут качаться одновременно и то, назвать это "одновременно" можно с натяжкой. хотя по факту пример работает отлично
ivsatel
в принципе для запуска нескольких закачек достаточно чтобы скрипт создавал несколько временных файлов с командами на скачивание. не вижу ничего здесь неудобного. как пример тема http://autoit-script.ru/index.php/topic,9142.30.html
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
joiner [?]
в данном примере только две позиции могут качаться одновременно и то, назвать это "одновременно" можно с натяжкой
Не согласен с Вами, ИМХО, это именно то, что имел в виду автор темы.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну не знаю. автор темы хотел запустить все по очереди не дожидаясь окончания первой закачки. а в предложенном тобой варианте качаются только два. а если выбрать более десятка песен на закачку, то видно что новая закачка запускается только после окончания предыдущей. пример больше подходит под задачу - " как поставить в очередь на закачку"
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
joiner [?]
в данном примере только две позиции могут качаться одновременно
Это скорее всего зависит от сервера, который ограничил число подключений (точнее GET запросов).

И доказательство этому менеджер закачек DM, который с натяжкой качает по 3 песни за раз.
 
Автор
I

ivsatel

Продвинутый
Сообщения
319
Репутация
84
Функция загрузки теперь не висит в очереди и если следующая функция распаковки, то получается попытка распаковать недокаченый файл.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так сравнение файлов по размеру
Код:
$InetSize = InetGetSize("http://download.geo.drweb.com/pub/drweb/cureit/drweb-cureit.exe", 1)
$FileSize = FileGetSize(@ScriptDir & "\drweb-cureit.exe")

если размеры совпадают, то распаковка
 
Верх