В нашей программе новый поток создается каждый раз, когда нужно сделать HTTP-запрос, и их может быть несколько одновременно. Проблема, с которой я сталкиваюсь, заключается в том, что если у меня уже есть два потока, в которых они зацикливаются на чтении из InternetReadFile()
после вызова HttpSendRequest()
, любые последующие попытки вызвать HttpSendRequest()
просто зависают на этом вызове, поэтому я получаю ранее упомянутое два потока продолжают нормально читать из своих соединений, но третий просто блокируется на HttpSendRequest()
, пока не истечет время ожидания.
Из того, что мне удалось найти самостоятельно, похоже, что это может быть просто способ работы wininet, поскольку спецификация HTTP рекомендует: "Однопользовательский клиент НЕ ДОЛЖЕН поддерживать более двух соединений с любым сервером или прокси".
Я видел, как различные программы обрабатывают несколько одновременных загрузок на один и тот же сервер, но я полагаю, что для этого им нужно проделать много дополнительной работы с точки зрения управления различными соединениями или написания собственного http-интерфейса.
Если бы потребовалась большая дополнительная сложность, чтобы настроить его для обработки более двух активных сеансов, я бы просто изменил вещи, чтобы обрабатывать только один или два файла за раз, оставив остальные в очереди. Однако, если бы существовал какой-то несложный способ разрешить более двух за раз (я думаю, что использование нового процесса для каждой загрузки может сработать, но было бы более беспорядочно), это было бы предпочтительнее; в любом случае, это не значит, что будет загружаться более 3-5 одновременно, и каждая загрузка осуществляется по запросу пользователя. Я читал некоторые упоминания о взломе реестра, чтобы изменить ограничение, но это определенно не то, что я бы сделал. Любые идеи?