Название: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: thechicho от Октябрь 01, 2011, 20:49 в общем пишу прогу для парсинга баланса билайна. 40+ телефонов.
в настоящий момент получилось реализовать парсинг для 1 телефона. после клика на кнопку, сигнал идет в 1 слот. там формируется запрос, потом сигнал идет во 2ой слот, потом в 3ий, в итоге в 4 слоте я получаю баланс. как мне сделать, чтобы автоматически пошел еще один "круг" для следующего номера? или было бы ваще шикарно, если бы это все происходило одновременно. т.е. по потоку на номер телефона (40+). это реально вообще реализовать? Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: neversleep от Октябрь 02, 2011, 12:17 Общий принцип примерно такой:
1) Заведи список(QList например) или массив номеров. 2) Вместо сигналов/слотов используй процедуры. 3) В параметрах каждой процедуры передаются необходимые значения. 4) В цикле пробегись по списку вызывая процедуры в нужном порядке. (или вызывая только первую процедуру, а та, в свою очередь, делает вызов второй и тд.) 5) Для многопоточности используй класс QThread. Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: thechicho от Октябрь 02, 2011, 14:47 // Вместо сигналов/слотов используй процедуры
можно пример? просто у меня так ща сделано: void MainWindow::on_pushButton_clicked() { ... QNetworkAccessManager *qnam = new QNetworkAccessManager; connect(qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(download1(QNetworkReply*))); qnam->get(QNetworkRequest(QUrl("https://uslugi.beeline.ru/"))); ... } void MainWindow::download1(QNetworkReply *reply) { ui->textBrowser->insertPlainText("signal dostig download1()!\n"); reply->deleteLater(); if(reply->error() != QNetworkReply::NoError){ ui->errorLabel->setText(tr("%1").arg(reply->errorString())); //return; } QByteArray answer = reply->readAll(); ... } и я пока не представляю как по-другому реализовать?.. Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: thechicho от Октябрь 02, 2011, 15:32 как мне это заменить?!
Код
Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: neversleep от Октябрь 02, 2011, 16:06 // Вместо сигналов/слотов используй процедуры Прошу прощения, я не обдуманно ответил.можно пример? просто у меня так ща сделано: void MainWindow::on_pushButton_clicked() { ... QNetworkAccessManager *qnam = new QNetworkAccessManager; connect(qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(download1(QNetworkReply*))); qnam->get(QNetworkRequest(QUrl("https://uslugi.beeline.ru/"))); ... } void MainWindow::download1(QNetworkReply *reply) { ui->textBrowser->insertPlainText("signal dostig download1()!\n"); reply->deleteLater(); if(reply->error() != QNetworkReply::NoError){ ui->errorLabel->setText(tr("%1").arg(reply->errorString())); //return; } QByteArray answer = reply->readAll(); ... } и я пока не представляю как по-другому реализовать?.. как мне это заменить?! Заменить на что? Тебе надо подождать пока запрос выполниться? QNetworkRequest::get() возвращает QNetworkReply*, у которого есть ф-ция isFinished(). Но только делать это всё надо в отдельном потоке.. тогда можно последовательно пробежаться по списку, к примеру:Код
Код
Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: thechicho от Октябрь 02, 2011, 17:44 // Прошу прощения, я не обдуманно ответил.
да ты гонишь ;D //Но только делать это всё надо в отдельном потоке.. тогда можно последовательно пробежаться по списку а я думал для каждого телефона можно свой поток создать и делать одновременные запросы. это если многопоточность. а если тупо перебор, то тупо в проге for (int i = 0; i < logins.size(); i++) { } т.е. эту задачу не решить никак, не создавая отдельного потока? :-[ у меня нету опыта работы с ними, чую что это геморрой :D Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: thechicho от Октябрь 02, 2011, 18:03 Цитировать Все операции выполняются асинхронно. Когда вызывается функция, такая как get() или put(), управление сразу же возвращается программе, а собственно передача данных начинает производиться, когда управление опять переходит в цикл обработки событий Qt поясните плз это на конкретном примере? Название: Re: Как реализовать (последовательная или многопоточная авторизация на сайте) Отправлено: thechicho от Октябрь 02, 2011, 19:06 может как-то можно прикрутить
Код
|