Загрузка в несколько потоков в WinINet
От: egblob  
Дата: 04.08.08 20:57
Оценка:
Пытаюсь загрузить файл с помощью WinINet, в один поток все нормально. Когда делаю 2 и больше потоков, время загрузки увеличивается в 1.5-2 раза. Похоже я делаю что-то неправильно.

Действую примерно так:

1. Через _beginthread создаю поток и передаю указатель на экземпляр класса с веб-адресом, указателем на открытый файл и еще кое-чем.
2. В нем вызываю InternetOpen, InternetConnect, HttpOpenRequest, HttpSendRequest.
3. Далее в цикле функцией InternetSetFilePointer устанавливаю указатель на _нужное_место_, загружаю данные через InternetReadFile и пишу их в файл.

_нужное_место_ передасется в поток по указателю и после каждого InternetSetFilePointer увеличивается на объем буфера. Получается общий для всех потоков файловый указатель на место, которое еще не закачивается ни в одном потоке.
Файл открываю тоже снаружи и передаю указатель.
Запись в файл и вычисление _нужного_места_ производится в CriticalSection'ах.

Примеры с загрузкой в несколько потоков, которые нашел не осилил и, кажется, они принципиально другие.
Скажите, пожалуйста, в какую сторону думать. Примерно, какие функции и в каком порядке, дальше наверна сам разберусь. И с потоками, и с WinINet всего второй день разбираюсь, так что прошу сильно не ругаться, если очень криво сделал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.