Название: Потоки, QNA, QNP и finished() Отправлено: Orfus от Октябрь 26, 2011, 20:12 Доброго времени суток.
Имеется: Главный поток управляющий N потоками в которых крутятся N QNetworkAccessManager цель которых получить и спарсить страницы. Главный поток, перед тем как выдать задание назначает дочерним проксю. Каждому дочернему уникальную, но у всех 1го типа QNetworkProxy::HttpProxy. Всё прекрасно Собственно говоря, как я это определяю. По сигналу readyRead() от QNetworkReply я вызываю сло примерно следующего содержания: Код Какое-то время файлы пишутся но потом их размеры замирают (могут помереть на 42Кб могут на 18Мб). В то же самое время, через те же самые прокси FireFox успевает принять нужную мне страницу до конца (определяю по наличию </html> в stringHTML), причем дважды (1 раз с графикой, второй раз в виде исходного кода страницы). Прошу совета как быть в такой ситуации. Можно ли как то реанимировать процесс приёма страницы? Стоит ли делать делать reply->abort(); по сигналу некоего таймера или прокся должна сама сообщить о смерти? ??? Название: Re: Потоки, QNA, QNP и finished() Отправлено: SimpleSunny от Октябрь 26, 2011, 20:43 Если работаешь с проксями, то лучше заведи себе таймер секунд 10-20, в зависимости от качества прокси.
При начале загрузки запускай таймер, в слоте readyRead, перезапускай таймер, в слоте finished останавливай. И в слоте timeout reply->abort(); Название: Re: Потоки, QNA, QNP и finished() Отправлено: Orfus от Октябрь 26, 2011, 20:47 Ну у меня проблема в том что
1) прием медленный (огнелис в 2 раза быстрее работает). 2) прием останавливается, а у огнелиса нет. Название: Re: Потоки, QNA, QNP и finished() Отправлено: Orfus от Октябрь 27, 2011, 22:59 Ну у меня проблема в том что 1) прием медленный (огнелис в 2 раза быстрее работает). 2) прием останавливается, а у огнелиса нет. Собственно переписал под QSslSocket. Стало лучше, но не совсем. Осталась одна небольшая проблема, сокет переходит в статус QAbstractSocket::UnconnectedState раньше чем я успеваю вычитать с него конец. Пробовал ловить Код Безрезультатно. всё протекает примерно следующим образом Цитировать Запускается C:\QtSDK\PROJECTS\SSL_Test-build-desktop\release\SSL_Test.exe... SslGrabber::SslGrabber(QObject *parent) SslGrabber::stateChanged() QAbstractSocket::HostLookupState SslGrabber::stateChanged() QAbstractSocket::ConnectingState SslGrabber::stateChanged() QAbstractSocket::ConnectedState SslGrabber::sslErrors SslGrabber::StartRec() SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::timeout() QAbstractSocket::ConnectedState 0 SslGrabber::stateChanged() QAbstractSocket::ClosingState SslGrabber::stateChanged() QAbstractSocket::UnconnectedState SslGrabber::timeout() QAbstractSocket::UnconnectedState 0 C:\QtSDK\PROJECTS\SSL_Test-build-desktop\release\SSL_Test.exe завершился с кодом 0 Кто что может посоветовать в плане отлова хвоста? не дописывает не так уж и много порядка 10кб, по сравнению со страницей в 8мб... UPDATE Переписал прием на Код и проблема решилась. Из 4х попыток 4 раза страница была записана до конца. Спасибо всем отвечавшим :clapping: |