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