c++ http request qthread

c++ - La solicitud de obtención de Qt http siempre devuelve el código de estado 0 en solicitudes de modo de múltiples hilos



request qthread (0)

Tengo un método simple de solicitud dentro del cliente http simple, ese trabajador QRunnble está invocando a todos los que regresan de la solicitud son el estado 0, lo que más vi después de algunas pruebas, cuando le doy a la aplicación que se ejecute con 1 hilo que es
solo 1 url para procesar su multa de trabajo y obtengo el estado 200. sospecho que algo en mi código de cliente http está funcionando y no es compatible con el modo de múltiples hilos aquí está mi código httpclient completo:

este es el código de la solicitud:

#ifndef _HttpClient_ #define _HttpClient_ #include <QNetworkAccessManager> #include <QtNetwork> #include <QUrl> QT_BEGIN_NAMESPACE class QSslError; class QAuthenticator; class QNetworkReply; QT_END_NAMESPACE class HttpClient : public QObject { Q_OBJECT public: HttpClient(QFile* file,QMutex* mutex); ~HttpClient(); void startRequest(QString& url); public slots: #ifndef QT_NO_OPENSSL void sslErrors(QNetworkReply*,const QList<QSslError> &errors); #endif private: QString m_sUrl; QUrl m_url; QNetworkAccessManager* m_networkManager; QNetworkReply *reply; int httpGetId; void HandleNetworkError(QNetworkReply::NetworkError& networkError, QNetworkReply *networkReply); }; #endif ------------------------------------ #include "HttpClient.h" #include <QMutexLocker> #include <QTextStream> HttpClient::HttpClient() { m_networkManager = new QNetworkAccessManager(this); } HttpClient::~HttpClient() { ; } void HttpClient::startRequest(QString& url) { QNetworkRequest request; request.setUrl(QUrl(url)); QEventLoop loop; reply = m_networkManager->get(request); connect(reply, SIGNAL(finished()), &loop, SLOT(quit())); loop.exec(); LOG_MSG("Is UrlAlive?:"+url.toStdString()) QString ApiResponse; QByteArray data=reply->readAll(); ApiResponse.append(QString::fromUtf8(data)); int iStatusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); if (reply->error()) { QNetworkReply::NetworkError networkError = reply->error(); HandleNetworkError(networkError,reply); } QString s = QString::number(iStatusCodeV); reply->deleteLater(); reply = 0; } void HttpClient::HandleNetworkError(QNetworkReply::NetworkError& networkError,QNetworkReply *networkReply) { if(networkError != QNetworkReply::NoError) { QString err = networkReply->errorString(); LOG_MSG("HttpClient::HandleNetworkError:"+err.toStdString()); } } #ifndef QT_NO_OPENSSL void HttpClient::sslErrors(QNetworkReply*,const QList<QSslError> &errors) { reply->ignoreSslErrors(); } #endif

todo esto llamado del método QRunnble que se ve así:

void ThreadWorker::run() { QMutexLocker lock(_m); startwork(); lock.unlock(); } void ThreadWorker::startwork() { m_pHttpClient = new HttpClient(); //each thread gets unique url m_pHttpClient->startRequest(m_url); }

¿Por qué está fallando todo el tiempo?