Russian Qt Forum
Июнь 16, 2024, 03:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkAccessManager метод get  (Прочитано 4873 раз)
BuRn
Гость
« : Август 27, 2013, 11:24 »

Добрый день. Правильно ли я понял, что если я сделаю что - то типа :
Код:
QNetworkAccessManager manager;
for(int i=0;i<100;i++)
{
  manager->get(QNetworkRequest(QUrl("http://google.com")));
}
То цикл открутится полностью, но в свою очередь одновременно 100 запросов к гуглу не будет ? Судя по доке, одновременно пройзет только 6 запросов , остальные 94 станут в очередь ? Каковы последствия если будет не 100, а 100000 к примеру
Записан
mutineer
Гость
« Ответ #1 : Август 27, 2013, 11:27 »

В очередь станут 99994 запроса)))
Записан
BuRn
Гость
« Ответ #2 : Август 27, 2013, 11:30 »

В очередь станут 99994 запроса)))
как это скажется на производительности ? или лучше все же эмитить какой - нибудь сигнал что освободилось место и делать еще один гет ?
Записан
mutineer
Гость
« Ответ #3 : Август 27, 2013, 11:34 »

Зачем тебе вообще одновременно 100к гетов? Почему их последовательно не выполнить?
Записан
BuRn
Гость
« Ответ #4 : Август 27, 2013, 11:40 »

Зачем тебе вообще одновременно 100к гетов? Почему их последовательно не выполнить?
Парсер. Я думаю если одновременно будет обрабатываться хотя бы по 6, то явно будет быстрее.
Записан
mutineer
Гость
« Ответ #5 : Август 27, 2013, 11:44 »

Одна и та же страница будет обрабатываться 100 раз?
Быстрее будет не особо - загружаются страницы асинхронно, но передаваться тебе будут в один поток
Записан
BuRn
Гость
« Ответ #6 : Август 27, 2013, 11:47 »

Одна и та же страница будет обрабатываться 100 раз?
Быстрее будет не особо - загружаются страницы асинхронно, но передаваться тебе будут в один поток
естественно страницы разные, это я пример просто привел, так будет происходить гет по вектору QString-ов в которых лежат урлы
Записан
mutineer
Гость
« Ответ #7 : Август 27, 2013, 12:08 »

ИМХО лучше делать запрос по необходимости, а не забивать внутреннюю очередь "навырост"
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #8 : Август 27, 2013, 14:10 »

одновременно 100 запросов к гуглу
Не шутите так с гуглом - забанят !
Записан
schmidt
Гость
« Ответ #9 : Август 28, 2013, 13:02 »

Зачем тебе вообще одновременно 100к гетов? Почему их последовательно не выполнить?
Парсер. Я думаю если одновременно будет обрабатываться хотя бы по 6, то явно будет быстрее.

+1 Улыбающийся Чтобы что-то выполнялось параллельно, нужно выполнять это в  нескольких потоках. Я не силен в многопоточном программировании на Qt, но код ваш, скорее всего должен выглядеть так:

Код:
void proceedNextUrlFromSharedVector() {
    // Создать экземпляр QNetworkAccessManager, который будет обращаться к серверу

    // Создать экземпляр вашего класса, который будет обрабатывать конкретный ответ сервера для этого потока

    // Связать сигнал replyFinished() со слотом вашего объекта-обработчика

    // Взять следующий url из shared вектора (помня про мьютексы и прочие издержки многопоточной среды :) )

    // Отправить запрос через QNetworkAccessManager
}

А потом эту самую функцию используйте в качестве стартовой при создании потока. Ну и, разумеется, когда ваш слот обработает ответ сервера, вам придется каким-то образом подчистить за собой память перед завершением потока, выделенную в proceedNextUrlFromSharedVector().
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.089 секунд. Запросов: 23.